Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Daniel-Stojanovski/finkiopendesk/llms.txt

Use this file to discover all available pages before exploring further.

FinkiOpenDesk is a two-tier web application with a React single-page frontend and a Spring Boot REST API backend, connected to a PostgreSQL database. This page describes how those layers are structured, how authentication works, how the database schema is managed, and how the platform is deployed.

High-level overview

Browser
  └── React SPA (Vite, React Router DOM v7)
        │  HTTPS requests (Axios)

  Spring Boot REST API (Java 21)

        ├── JWT verification (HMAC-SHA256 / OAuth2 resource server)
        ├── Business logic (Services)
        ├── Data access (Spring Data JPA Repositories)


  PostgreSQL database

        └── Schema managed by Flyway migrations (V1_1 – V1_20)

  SendGrid SMTP
        └── Student activation emails (triggered on registration)

Deployment
  ├── Frontend → Docker container on Render
  │     https://finkiopendesk.onrender.com
  └── Backend  → Docker container on Render
        https://finkiopendesk-be.onrender.com

Frontend

The frontend is a React 19 + TypeScript application built with Vite. It uses React Router DOM v7 for client-side routing and Axios for all HTTP communication with the backend API. Styles are written in SCSS. Key routes:
PathComponentPurpose
/subjectsForumSubjectCardsBrowse all subjects
/discussionsForumDiscussionCardsBrowse active discussions
/careers or /professionsGuideProfessionCardsBrowse profession roadmaps
/subjects/pid/:pidGuideProfessionViewView a profession’s subject roadmap
/discussion/pid/:idProfessionDiscussionProfession discussion thread
/discussion/sid/:idSubjectDiscussionSubject discussion thread
/discussion/cid/:idChannelDiscussionChannel discussion thread
/registerRegisterPageUser registration
/register/activateRegisterStudentPageStudent email activation
/loginLoginPageUser login

Backend

The backend is a Spring Boot 3.x application running on Java 21. It exposes a REST API consumed exclusively by the frontend.

Controllers

ControllerBase pathResponsibility
AuthController/auth/*Registration, activation, login
SubjectController/api/subjectsSubject listing and data
ChannelController/api/channelsChannel listing and data
CommentController/api/commentsComment creation and retrieval
ProfessionController/api/professionsProfession listing and roadmap data
VoteController/api/votesCasting and reading subject-profession votes
NotificationController/api/notificationsFetching and marking notifications
UserFavoriteController/api/favoritesManaging user favorites

Domain models

The core data model covers: User · Subject · Profession · Channel · Comment · Vote · NotificationGroup · NotificationEvent · UserFavorite · Tag · SubjectTag · Program · ProfessionProgram · ProgramSubject

Database and migrations

FinkiOpenDesk uses PostgreSQL as its database. The schema is managed by Flyway, which applies versioned migration scripts on application startup. Migrations run in order and are never modified after they are applied. Migration history (V1_1 – V1_20):
VersionWhat it adds
V1_1Initial professions table
V1_2subjects table
V1_3discussions and base discussion structure
V1_4channels table linked to subjects
V1_5tags and subject_tags junction table
V1_6users table with roles and password hash
V1_7Student activation token column on users
V1_8comments table with parent-comment self-reference
V1_9votes table for subject-profession relevance scores
V1_10notification_groups table
V1_11notification_events linked to notification groups
V1_12user_favorites table for bookmarked subjects and professions
V1_13programs table
V1_14profession_programs junction table
V1_15program_subjects junction table
V1_16Indexes on frequently queried foreign keys
V1_17Seed data — initial set of professions
V1_18Seed data — initial set of subjects
V1_19Seed data — program definitions and program-subject mappings
V1_20Seed data — profession-program mappings and initial tags

Authentication

FinkiOpenDesk uses two token types, both issued as JWTs signed with HMAC-SHA256: Activation token Issued on student registration. Embedded in the activation email link. The frontend sends it to /auth/activate along with the chosen password. The token is single-use and expires after a short window. Login token (access token) Issued on successful login at /auth/login. Returned in the response body and stored client-side. The frontend attaches it as a Bearer token in the Authorization header of every subsequent API request. The backend is configured as an OAuth2 resource server. Incoming requests to protected endpoints are validated against the token’s signature and expiry before reaching controller logic.
POST /auth/login
  → validates credentials
  → issues signed JWT (HMAC-SHA256)
  → client stores token

GET /api/subjects  (with Authorization: Bearer <token>)
  → OAuth2 resource server filter validates token
  → request reaches SubjectController

Email delivery

Student activation emails are sent via SendGrid SMTP. When a student submits the registration form, the backend:
  1. Creates the user record with an INACTIVE status.
  2. Generates a signed activation token.
  3. Sends an email containing the activation link to the provided address via SendGrid.
No email is sent for general user registration.

Deployment

Both the frontend and backend are packaged as Docker images and deployed on Render.
ServiceURLNotes
Frontendhttps://finkiopendesk.onrender.comStatic React build served from a Nginx container
Backendhttps://finkiopendesk-be.onrender.comSpring Boot fat JAR inside a JDK container
The backend connects to a managed PostgreSQL instance provided by Render. Environment variables (database URL, JWT secret, SendGrid API key) are injected at runtime via Render’s environment configuration.
Render’s free tier spins down idle services after a period of inactivity. The first request after a cold start may take 30–60 seconds while the container restarts.

Further reading

Authentication details

Full explanation of student registration, email activation, and JWT token flow.

Deployment guide

Step-by-step instructions for deploying the backend on Render with Docker.

Frontend deployment

How to build and deploy the React frontend container on Render.

Environment variables

Required environment variables for both the frontend and backend services.

Build docs developers (and LLMs) love