Sylvain DOIGNON

Technology enthusiast. Love to solve all kinds of problems.

I realized this small website to present my personal IT projects. The number of my Github repositories keeps growing (for serious ou fun projects) and I wanted to show them in a more orderly way. For every project I explain why and how & and provide a screenshot and a link to the repository where you can find the actual code. I hope some of them will get your attention.

There are currently ? projects presented here with the following tags (click to filter): empty

Viewing the project with the tag :

Now
 October 2020

Yoga Website - Booking, Payment & Mailing

I needed to create a complete online solution to manage remote Yoga lessons.

That meant a website to welcome visitors and a way to book available lessons. A payment integration was also needed with refund, postpone and cancel options. But also a mailing solution to batch send Zoom links when a lesson was about to start and some customer insights on the platform. At last, all this needed to run cheap : it was cheap indeed, I made all this work for free.

The easy part was the website. I used Jekyll since it's available with GitHub pages, which are free to run. The website being mainly static, this was an obvious choice. The website is responsive and lightweight to maximize user conversion.

Then, I created an "admin dashboard" to create new yoga lessons. This part is not available publicly on my GitHub. Basically it's a AWS Cloudformation stack with an API Gateway, a DynamoDB database and some Python Lambdas. When connected to a well-known URL, one can create new lessons. On submission, the Zoom API is called to create a new scheduled meeting, Stripe is called to create a new product and a new entry in DynamoDB is saved. At this point, this lesson is now displayed and bookable on the website (lessons are queried via the API).

When someone book a lesson, we collect the payment via Stripe in a few clicks (the Apple Pay integration was convincing). When the system receive the Stripe confirmation callback, a transactional confirmation email is sent. In this email, this user receive his private account link which he can use to manage his lessons. He can postpone any lesson to another open booking, credit his account when cancelling one lesson (so his next booking is free or discounted) or ask for a refund. It was essential to empower the user so all those actions were available in a few clicks with no hustle.

This was a fantastic project, well used during the 2020-? stay-at-home period. So many technical bricks were necessary and exposed to real users with real money : everything needed to be optimized and polished. And thanks the power of serverless and careful pick of integrations, this stack practically runs for free. Overall one of the nicest personal project I ever did for sure.

View the website

APIPythonAWSLambdaDynamoDBCloudformationWebCSSJSZoomStripeSendinblueAmplitudeJekyll

 More details

 December 2017

VPN on the Go

This project was born when I occasionally needed a VPN. Having played a bit more with AWS and Cloudformation, it was the perfect time to use it for personal projects.

Consisting of a single Cloudformation file, this stack creates a S3 bucket, some Lambda functions and an API Gateway. The API Gateway statically serves under a well-known path a web page. When entering the correct password, you land on the VPN on the Go dashboard when you can see available VPNs. Every VPN is a EC2 instance configured with softethervpn offering L2TP/IPSec PSK and OpenVPN connections, supporting a large range of clients. To ease the OpenVPN connection, the client configuration file is available to download from S3. Since I usually only needed a VPN for a few hours, an auto destroy option is available : the EC2 instance and all configuration could be erased automatically after a certain time.

This project was very fun to create and helped me a lot. Being able to easily create on the spot VPN instances with new IPs for cheap always seemed like magic.

APILinuxHardwarePythonAWSLambdaCloudformationWebJSVPN

 More details

 November 2017

DHome

I just brought a new toy : a SensorTag. This little bad boy is able to record a lot of metrics like temperature, humidity, pressure, etc. I wanted to save those metrics and present them in a nice day. Furthermore, I wanted to add weather and public transport information as I did in a previous project, and some lights control.

That's why a created some Dockerfiles to, first create a Node.js app gathering metrics for the SensorTag every few minutes and storing them in a database, an API able to get those stored metrics and pilot my Hue lights, and finally a web app to expose all this.

I created the web app with React to try this new fashionable library and found it very compelling. InfluxDB was chosen for this thanks to its ability to handle metrics, even though everything remains quite basic.

My Raspberry Pi was running this and I ran the web app on an old tablet, it was beautiful and made good usage of the SensorTag !

APILinuxHardwareCSSNode.jsJSWebReactnpmInfluxDBDocker

 More details

 November 2017

Gnome Shell - Office 365 Mail Checker

I now inherited a new email address, a Office 365 one for work. Having no official Office 365 email app on Linux prevented me from getting notifications when receiving new emails. I didn't want to rely on the web app since (at the time) the Outlook browser notifications were not very reliable and I would have to open my browser and the Office 365 to tab to get it working at all time.

That's why I created a straightforward Gnome Shell extension to notify me in the taskbar when received a new email : problem solved.

Gnome ShellLinuxJS

 More details

 April 2017

My new resume

My previous resume was made with Photostop. Every edit was a nightmare: boot up a Windows VM, open the bloated Photostop, make the edit, re-align all the content, flatten all the layers, export it with the correct parameters... Furthermore Photoshop is not free as in speech or as in beer.

That's why I decided to make the same resume but with LaTeX which is a professional document preparation system. Basically, you declare the general layout, the content and LaTeX does all the formatting part. This is great! No more time is wasted on the layout.

This was my first real LaTeX document and I used the great moderncv document class. I only disliked the header layout so I made one myself.

Now, editing my resume is really easy. Fire up a text editor, make the edit and compile in seconds the corresponding PDF.

LaTeX

 More details

 April 2017

This website

Created to explain and present my projects in a more practical manner that Github does.

Made from scratch, easily editable & hosted on Github.

This website is defined by meta-language, such as LESS & Pug who compiles respectively to CSS & HTML. This allows the code to be as small as possible and very modular. Furthermore, when in development, I've added a watcher on some files to automatically launch the build process. In this way, there is no "build time" drawback.

Code strive to be minimal. This project permitted to acquaint myself with the relatively new CSS flexbox positioning system.

WebShell scriptsnpmLESSCSSPug

 More details

 December 2016

My Terminal Dashboard

I always dreamed about a screen always on presenting some useful information. The low energy small laptop WM8650 from a previous project was a perfect device for this.

This device can't host an X server with good performance that's why a fancy way to create such a dashboard can be a terminal app. I've chosen the Go termui library to learn the Go language.

Extra, nobody likes to miss a train because it left just a few minutes ago. Also, the general train status is important. When all trains are cancelled because of an outage, it's better to anticipate. Furthermore, everybody likes weather forecasts. That's why I wanted my app to display all this information.

For this, this app fetches some information from the RATP & the Open Weather APIs.

The dashboard displays the following info :

  • Trains status
  • Next trains
  • Next bus
  • General day information
  • Weather
    • Temperature
    • Cloud coverage
    • Wind speed
    • Rain

You can also control the house's light bulbs thanks to the Hue system.

This device is now used everyday and is very convenient. I never missed a bus or discovered a cancelled train while in the station!

GoTerminal appAPI

 More details

 November 2016

Astronomy Picture of the Day

This project was my third Android app but the first really useful one: this app fetches and present the NASA's Picture of The Day.

I started this project for a school project intended to learn images gesture on Android. But instead of the dumb and useless app requested, I wanted to make this app useful. Therefore, I pushed the instructions further and came with this idea of presenting beautiful images (with gestures support, of course) but along with other features. Such as:

  • Fetch the last two NASA Pictures of the Day
  • Create a date picker to view a past picture
  • Open the related NASA website
  • Share the app with your friends
  • Great UI?

This app has been great fun. I still have the app on my phone to learn space things and this app is often downloaded by people all around the globe.

AndroidJavaAPI

 More details

 November 2016

MiniList

My second Android app was very educational and kind of useful. In fact, this app is the classic TODO app.

This app manages notes. Each note can have a deadline and a priority. Then, you set the task as "done". The main view allows the notes to be sorted by numerous criteria.

This project permitted to learn the intent, activity and list view objects in Android.

AndroidJava

 More details

 November 2016

Temperature Convertor

This is a school project. The instructions were to make a temperature converter with a UI app as simple as possible. That's why there are no buttons but only two fields that convert automatically the number you input.

This app permitted to discover the Android development that I always wanted to discover.

AndroidJava

 More details

 October 2016

WM8650

This is one of my favourite challenge/project.

While friends were about to throw away this antique Android-only laptop (useless to them), I recovered this laptop challenging myself to install Linux on it.

First, this Chinese small laptop had one of the first release of Android : Froyo. It was painfully slow on this device and not usable at all: who support Android 2.2 nowadays?

As i said, I decided to make it run Linux! The possibilities could be endless after that. This device uses uboot as a bootloader and supports booting from an SD card. Luckily, the architecture armv5 is quite common. I managed to find a great OS for it: ARM Arch Linux. Others had done this before but with older kernels. So I had to to cross compile a kernel, reboot by reboot, option by option to get this device up with the latest version of ARM Linux & the Kernel (4.7 at the time).

This has been great fun. I learned a ton about the kernel and the ARM architecture. And more importantly, this device is now useful! It has a fully working ethernet port, 3 USB ports, WIFI, small screen and keyboard!

OSHardwareKernelLinuxFirmware

 More details

 September 2016

My dotfiles

I love to tune everything to the perfection for my usage. So, after hours on various things (Zsh, Git, etc.) here's my dotfiles.

More info coming soon.

LinuxShell script

 More details

 May 2016

MiniVim

My first text editor was Sublime Text. I still like it. However it's not an open-source software and can't run in terminals. I always knew about Vim & Emacs but wasn't appealed by the apparent complexity and change.

When I had to edit a lot of files in terminals, I got tired of nano. That's why I managed to make Vim behave like Sublime Text. The MiniVim project was born.

I spend hours creating the most awesome vim configuration I could. That was very instructive. I discovered Vim a lot. The project is now quite big and complete and Vim is now much more intuitive for Sublime Text newcomers.

I use this tweaked Vim everyday at work or at home.

After Korben.info made a post about it, people took interest in the project and I had to manage it like a real small open-source project: issues, pull-requests, forks, etc.

This is my most successful project yet with over 270 Github stars.

VimCommunity

 More details

 May 2016

Graf'hit.net

For a school project, we had to realize a website with a great UX. We didn't wanted to create another useless website so we ask around the university who wanted a new website. Graf'hit radio answered first.

We decided to develop the website using Node.js that I have been experimenting with a bit. At this occasion, I improved my Node.js skills and was my first website created with Node.js.

One interesting requested feature was the fact that you should be able to navigate on the website without the current audio stream interrupted. That means you can't just change the page when the visitor click a link but you have to dynamically update the content using Ajax.

This website has some great features and got myself to know about audio in HTML5: real-time, replays, etc. It was impressive and empowering to design a website for a real usage, a radio.

Source code

Node.jsJSAjaxMySQLWeb

 More details

 March 2016

Screensaver SVG-JS

I wanted to find a fun project for an evening and learn more about SVGs.

That's why I created a website recreating this old Windows XP screensaver which bounce a triangle across the screen edges.

Source code

SVGJS

 More details

 February 2016

Human2Cat Chrome Extension

Following my Human2Cat language experiment, I wanted to be able to translate text on the fly in the browser. Furthermore, at that time, I never wrote a browser extension.

When a text is selected, with a right-click or a hotkey, you see the translated text. When the selection is in an editable field, the content is replaced by the translation.

With this project, I discovered the Chrome extension API which is quite good in my opinion. This experiment is small but improved my knowledge about browsers.

This extension is now published on the Chrome Extension Store, I'm a happy man.

JSChrome Extension

 More details

 February 2016

Human2Cat Language

Fascinated with ciphers, I wanted to create a small and fun one.

This program can turn any text into a "cat language". => grau, mio, Mio, Miaa, mi mia, miaa, Miouu, Miuu, miaa, Mi, Miou, mi Mii, Mi, miouu, mi miau, Miau, miaa, miouu, mi Mi, miouu, Miao, mi miau, Miu, miao, miau, mi Mio, miouu, miau, Miouu, mi Mi, mi mii Mii, Mi, miau, mi miou, Mi, miouu, Miuu, Miau, Mi, Miuu, Miu, mii miouu

Then, you can convert it back with no information loss whatsoever. It's not encrypted at all, it's basically just a fancy way to store 8 bits (that way, all UTF-8 character sets are supported).

Source code

JSWebCiphers

 More details

 January 2016

KikiBangBang

Java is, for now, not my cup of tea. However for a school project, in a group of two we had to make a website with Java EE.

This website is KickStarter or IndieGogo basic copy. I knew nothing about Java EE at first so I learned a lot that way.

WebJava EEJavaMySQL

 More details

 December 2015

How much do you make per...?

I wanted to know how much I made in an hour, in a day, etc. I found no websites doing so.

Of course I could just grab a calculator. But, I can't be the only one wanting to know this: someone had to do it.

Source code

JSWeb

 More details

 December 2015

Gnome Shell - Toggle Zoom

My laptop has a high resolution for its screen size. That means, sometimes, I can't read the texts because it's too small. In this was, I used xrandr to "scale" the display to a lower resolution.

But this solution needed to open a terminal and type something and was not very convenient. That's why I decided to add a shortcut to "toggle scaling/zoom" in my desktop environment ; Gnome Shell at the time.

My extension creates a small icon on the top right corner of the screen which is able to toggle the scaling. This worked and no more terminals were opened to change the scaling factor from this day.

Gnome ShellLinuxJS

 More details

 December 2015

Gnome Shell - DDCcontrol

I have an external monitor. I frequently change the brightness with the buttons under the monitor. However, this is not convenient and fast.

The DDC protocol exists to control the monitor settings through HDMI. That way, using a command line program, I was able to set my monitor brightness. Still, that was not enough fast and intuitive.

That's why a created another Gnome Shell extension that pop up a small window with a slider to change a monitor brightness. That way, I was satisfied.

Gnome ShellLinuxJS

 More details

 June 2015

Project Calendar

For a school project, in a group of two we had to develop an C++ Qt Calendar application. That was the final project for a fascinating C++ course.

Features requested were;

  • Display week days
  • Create projects with corresponding tasks
  • Meta-Task can be created to gather sub tasks
  • Each task has a start date, an end date, etc.
  • Export all the projects
  • Create reminders

I took this project very seriously and I wanted to make the best app possible. Both code side and UI side. I worked hard, discovered Qt in depth to create this app.

Finally, we had the best grade for this app and we learned a lot.

C++Qt

 More details

 November 2014

UTC login bookmarklet

The SSO of my University forbids the web browser to remember credentials. While this is mainly a good idea, on my personal computer this is a struggle.

For this, I created a bookmarklet (a special bookmark that embeds Javascript code) to solve this problem. When you click on this special bookmark, it will redirect you to the SSO website if you're not already there. Then, it will automatically submit the form using your credentials.

As always, I like to share and help others. That's why I created a small website to allow everyone to create their own login-bookmarklet.

This website was a success was used by other students!

BookmarkletJSWeb

 More details

 June 2014

Travl

In summer 2014, my friends and I went on a long trip across Europe hitchhiking. That was amazing. Before we began, I wondered how we could give news to our families.

Using our email address were not an option because it would be dangerous if we logged on a shared computer. Furthermore, we would be sentenced to include a long list of all the people we wanted to share news with.

That's why, we needed a website to post news. However, CMSs at the time were not very mobile friendly. So I had to develop a mobile-centric one!

  • The website is very small in size
  • The configuration is minimal, simply create a folder with each member you want to create
  • You can write articles easily, even on mobile. You can join pictures

During this long trip, this website was heavily used. Our parents loved it and we could share the address of this website to the people we met. That was a success!

PHPCMSJSSQLiteWeb

 More details

 May 2013

Piwake

In my University, viewing the timetable was a nightmare. You had to click 7 times and log in every time. That could not last.

This was my first real project. In a nutshell, this website scrapped the Timetable server. Then, it parses the special files received. Then, it populates a database. Meanwhile, a website allowed to view the timetable very easily and... beautifully.

This project was a huge success. I started this website only for my personal convenience but soon lots of people in my class, then in other classes, used it.

I made two derivatives.

Piwake, the original

Piwake Lite, a lighter version that only needed Javascript and fetched the timetable "live"

Austra, or a project directed by the University itself to replace the original viewer including other enhancements.

This project was a ton of fun and very instructive. Having a website used by other people raised real world problem like availability (my Raspberry Pi sometimes crashed because of the unstable current).

PHPShell scriptMySQLJSRaspberry Pi

 More details

 May 2013

PiMeal

At that time, I lived in a family in Bordeaux and have to count my meal I took with them to pay them at the end of the month.

First, we had the "sheet of the fridge" system. It worked but was sometimes forgotten and you had to sum up at the end of the month something that a computer could do.

Also, I learned PHP in school during that time.

That's how my first PHP project was born: PiMeal. A small PHP page with a button on the bottom "Add a meal". Afterwards, depending of the time of the day, the meal would be stored in a database. And the global counter on the bottom was always up-to-date.

After that, it was a pleasure to add my meal and see how my app was working well!

PHPSQLiteRaspberry Pi

 More details

 May 2013

My Raspberry Pi

My Raspberry Pi.

This was the beginning of a long journey (not yet finished) of various projects. I learned a lot about Linux and Internet thanks to it.

In fact, it was connected to the Internet and I brought a domain. Then I set up a dynamic DNS because it was hosted behind a non static IP router.

LinuxRaspberry Pi

 More details