movGR

Follow Granada's public transport in real time

Launch app

Date
Role
Creator and developer
Status
Production

movGR is a modern Progressive Web App (PWA) built with Next.js and powered by a backend API built with FastAPI. It provides real-time tracking of Granada’s public transport system, including buses and metro lines, helping users stay informed and on the move.

Whether you’re a commuter, a student, or just exploring the city, movGR keeps transit information at your fingertips—live, accurate, and lightweight.

🧠 Architecture

Architecture of movGR

movGR follows a decoupled architecture where the frontend and backend are developed, deployed, and scaled independently.

🔌 API

The backend lives in the AWS Cloud, built with FastAPI and deployed via GitHub Actions. It serves as a crawler and API for the transport data.

  • AWS Lambda runs Python code (with BeautifulSoup) to scrape real-time data from transit-related websites.
  • These Lambda functions are triggered through AWS API Gateway, which exposes HTTP endpoints used by the frontend.
  • The backend is deployed via a GitHub repo (movgr-api), with CI/CD set up through GitHub Actions.

This setup ensures the API remains lightweight, scalable, and cost-efficient.

💻 Frontend

The frontend is built with Next.js and deployed on Vercel, offering instant updates upon each commit to main in the movgr-next repository.

  • Data is fetched directly from the AWS-hosted API.
  • localStorage is used to persist user preferences and session data.
  • As a PWA, movGR can be installed on any device, even functioning offline for cached views.

This makes the app fast, responsive, and user-friendly—optimized for mobile and desktop.

⚙️ Install it!

Installing movGR is a breeze—simply visit the web app on your browser and install it like a native app. No app store required.

Being a PWA, it offers:

  • Offline support
  • Native-like performance
  • Minimal install size

Try it now in iOS and Android

🌍 Open Source

movGR is 100% open source! Contributions, issues, and forks are all welcome: