StudyTracker is a fullstack web application that helps users track study sessions, measure productivity, and gain insights into their learning habits.
This project was built to understand how real-world applications are designed, connected, and deployed — from backend architecture to frontend integration and production debugging.
- 🔐 User authentication (custom session-based tokens)
- 📝 Log study sessions (date, hours, productivity, comments)
- 📊 Visualize productivity using charts
- 📅 Track study activity over time
- 🔄 Session validation on refresh
- 🗑️ Update and delete study sessions
- Designing REST APIs
- Handling authentication and session management
- Connecting a React frontend with a Java backend
- Debugging real production issues (SQLite → PostgreSQL migration)
- Managing environment variables securely
- Structuring a scalable backend (Controller → Service → Repository)
- Java 21
- Javalin
- PostgreSQL
- JDBC
- React (Vite)
- JavaScript (ES6+)
- CSS
- Frontend: Netlify
- Backend: Render
Create a .env file in the root of the project:
DATABASE_URL=your_database_url
DATABASE_USER=your_database_user
DATABASE_PASSWORD=your_database_passwordgit clone https://github.com/your-username/studytracker.git
cd studytracker- Create a database named
studytracker - Update your
.envfile
docker run --name studytracker-postgres \
-e POSTGRES_DB=studytracker \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-p 5432:5432 \
-d postgresRun the application from your IDE (e.g., IntelliJ)
cd frontend
npm install
npm run devbackend/src/main/java/no.hiof.studytracker
├── controllers/
├── service/
├── repository/
├── database/
└── Application.java
frontend/src/
├── components/
├── pages/
├── api/
└── main.jsx
- Built with Javalin to understand backend fundamentals without heavy abstraction
- Implemented custom session-based authentication instead of JWT
- Designed database schema manually with migrations at application startup
- Used environment variables instead of hardcoded configuration
- Add subjects & reports feature
- Introduce Flyway for versioned database migrations
- Implement connection pooling (HikariCP)
- Upgrade authentication using Spring Security
- Improve UI/UX design
This project represents my transition from learning backend fundamentals to building and deploying a complete fullstack application in production.