🚍 Find the last bus/tram of the day in Nantes. Made with Node.js and AngularJS. Data from TAN API by Semitan.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Last Bus Tan

Mockup LastBusTan

Development dependencies

less : npm install -g less

Install and run


npm install
npm install -g bower
bower install
node server.js


There is a Dockerfile in the root directory of the project. You can build an image, or just pull the image from Docker Hub ! In order to run the container, you can use the container_name you want (i used lastbustan for example).

# Pull from the Docker Hub...
docker pull tekrop/lastbustan
# ... Or build the image thanks to Dockerfile
docker build . -t tekrop/lastbustan:latest
# And run a container with the image
docker run -d --name <container_name> --publish 8080:80 tekrop/lastbustan

The app will be accessible at http://<your_ip>:8080/


You can see a demonstration of the website here : https://tan.tekrop.fr/

Development environment

I'm using some node modules in order to improve the development and the website loading time. Here is the list of the main modules :

  • express, for quick and easy setup
  • bower, for managing front-end javascript libraries
  • node-watch, for watching less and js code modification, and compile into a minified file each time I modify a file
  • node-minify, for minification of css and js files previously compiled
  • underscore, for several useful functions, allowing to write small code for big data manipulation
  • q, a library for promises
  • compression, for gzip/deflate server compression
  • helmet, for security of the app by setting various HTTP headers

Project structure

The project is divided in two parts :

  • the back-end (server), with development configuration, basic web server, and API server. In fact, it was a choice to make the calls to the TAN API server-side, and then transform the data in a format I exploit in front-end. Here are the main reasons : lighten the js computing client-side, allow anyone to build an application (Android, iOS, Windows Phone, ...) based on the API of the server, ... I understand that there will be a lot of calls to the TAN API from the server, but it's only an issue when we have a lot of clients, and that's not the case here.
  • the front-end (angular), with views, controllers, assets, and calls to the back-end API. As I have only three controllers for the three main pages, I wrote the controllers in a unique file.

Bugs and feedback

If you find any bug, problem, or if you have any suggestion for improvements, don't hesitate to make a ticket or send me a mail (vporchet@gmail.com). As it's my first Angular app, I probably made some mistakes and/or forgot to use some features provided by Angular. If it's the case, don't hesitate to contact me as well :)