ENGINEERING CASE STUDY · FULL-STACK APPLICATIONS
Carbon Tracker
Engineering case study.
VUE 3 · VITE · NODE.JS · EXPRESS 5 · SQLITE · JWT · BCRYPT · AXIOS
A compact full-stack app for logging daily energy use, with JWT authentication and SQLite.
- Role
- Full stack developer
- Type
- Built as an app for an NGO
- Status
- Delivered for a client
- Source
- Base project public; client-modified components private
01 / OVERVIEW
The project
A full-stack application made for an NGO to record daily electricity consumption in kWh. Users register, log in and keep a personal history of their usage, which is the raw data behind a carbon footprint. The public repository contains the base project only; the components completed or modified for the client are privately owned and cannot be shared.
02 / ARCHITECTURE
How it fits together
The data flow from the Vue interface to the SQLite database.
FRONTEND
Vue 3 app
Sign-in and energy log screens, calling the API with axios.
Sends to: Express API
Based on the published repository.
03 / CONTRIBUTION
My contribution
- Built an Express API with registration and login, bcrypt-hashed passwords and JWTs that expire after two hours.
- Added endpoints to create and list energy logs, scoped to the authenticated user.
- Built the Vue 3 and Vite interface for sign-in and for adding and viewing logs, calling the API through axios.
- Used SQLite so the database is created automatically on first run and needs no extra setup.
04 / ENGINEERING
Engineering notes
- A deliberately small scope: one API file and one main component, which makes the whole data flow easy to follow.
- Every log query is filtered by the user ID from the verified token, so users cannot read each other's data.
- The frontend reads the API address from an environment variable, so it can point at any backend.
TECHNOLOGY
Tools selected for the work.
- Vue 3 and Vite. A small reactive interface for entering and reviewing readings, with a fast build and very little overhead for a focused app.
- Node.js and Express 5. A minimal API in the same language as the frontend, enough for authentication and log endpoints without extra framework weight.
- SQLite. Needs no database server, so the NGO could run and back up the app with minimal setup and cost.
- JWT and bcrypt. Hashed passwords and short-lived signed tokens keep each user's readings private and let the API verify who is asking on every request.
- axios. A simple, consistent way for the interface to call the API and attach the token.