Case Study · Full-Stack · Accessibility

Bloom

A calm, accessibility-first full-stack productivity application designed to support routines, focus, and progress without pressure.

Public BetaReactFastAPIPostgreSQLDockerAccessibility

Overview

A calmer approach to productivity

Bloom began as a frontend prototype exploring calmer productivity for neurodivergent users. It has since evolved into a full-stack application with authenticated accounts, persistent routines, protected routes, guided demos, and accessibility-first design.

Rather than rewarding long streaks or encouraging pressure, Bloom focuses on helping users return after missed days with supportive routines and gentle progress tracking.

Problem

Why traditional productivity tools can feel overwhelming

Many productivity applications rely on streaks, constant notifications, dense dashboards, and visible signs of missed progress. For neurodivergent users, this can turn planning into another source of pressure.

Bloom was designed around a different question: how can a productivity tool help someone return to a routine without making them feel that they have failed?

Solution

A low-pressure workflow built around return and flexibility

Bloom combines routines, focus sessions, progress tracking, reflections, guided demos, and accessibility controls within a calm interface.

Visitors can explore the application without creating an account, while authenticated users can save their routines, profile preferences, and progress through a FastAPI and PostgreSQL backend.

Features

Key functionality

Authenticated Accounts

Secure registration, login, JWT authentication and protected routes.

Routine Management

Create routines, complete steps and track progress across sessions.

Guided Demo

Visitors can explore Bloom instantly without creating an account.

Accessibility First

Designed with calm visuals, accessibility settings and neurodivergent-friendly UX.

Architecture

How Bloom is structured

Bloom uses a separate frontend, backend, and database architecture. The React client communicates with a FastAPI API, while PostgreSQL stores authenticated user data, routines, preferences, and progress.

Frontend

  • React
  • Vite
  • JavaScript
  • Responsive component-based interface

Backend

  • FastAPI
  • Python
  • JWT authentication
  • Protected API routes

Database

  • PostgreSQL
  • Persistent account data
  • Routine and progress storage
  • User data isolation

Engineering Workflow

  • Git and GitHub
  • Feature branches
  • Jira issue tracking
  • Docker
  • Release documentation

Engineering Decisions

Challenges I worked through

Separating demo and account data

Challenge

Bloom needed a guided demo that visitors could explore without creating an account, while ensuring demo activity never affected authenticated user data.

Decision

I treated demo mode as a separate application path with sample data and isolated state rather than storing demo actions in PostgreSQL.

Outcome

Visitors can explore and experience Bloom immediately, while registered users retain private and persistent account data.

Adding persistence without losing the original experience

Challenge

The project began as a frontend prototype, so introducing authentication and persistence risked making the application feel more complex.

Decision

I kept the existing React frontend and added a FastAPI and PostgreSQL backend behind clear login, protected-route and persistence boundaries.

Outcome

Bloom evolved into a real full-stack application without removing the guided-demo experience.

Designing progress without punishment

Challenge

Traditional streak-based productivity systems can make missed days feel like failure.

Decision

I designed the product around routines, gentle completion feedback and returning without penalties rather than preserving a perfect streak.

Outcome

The interface better reflects Bloom's accessibility-first goal and gives the project a clearer product identity.

Learning

What this project taught me

Bloom has been my main capstone project. It combines frontend, backend, database, accessibility and engineering workflow skills.

How to evolve a frontend prototype into a full-stack application without rebuilding the entire user experience.

How to connect React to a FastAPI backend and persist authenticated user data in PostgreSQL.

How to separate public demo behaviour from private account data.

How to use protected routes and JWT authentication across the frontend and backend.

How accessibility decisions affect navigation, content density, feedback and product identity.

How to manage releases through GitHub, feature branches, Jira issues and structured documentation.

Project Timeline

How Bloom evolved

Bloom has developed through several focused releases, moving from a frontend prototype into a deployed full-stack application.

v1.0.0

Initial Bloom prototype

Created the first version of the routine and task experience.

v1.1.0

Task completion

Added task completion behaviour and clearer progress feedback.

v1.2.0

Daily reset

Introduced daily routine reset behaviour and improved return flows.

v1.3.2

Interface polish

Refined spacing, layout consistency and responsive behaviour.

v1.4.0

Empty states

Added clearer empty states and guidance for users with no saved content.

v1.5.0

Portfolio readiness

Improved presentation, project documentation and public-facing polish.

v1.6.0

Frontend refinement

Completed a major frontend polish pass and expanded accessibility controls.

v2.1.0

Full-stack authentication and persistence

Added FastAPI, PostgreSQL, authenticated accounts, protected routes and persistent user data.

v2.1.1

Stabilisation and testing

Verified account persistence, user isolation, protected routes and demo separation.

Next Steps

Future improvements

Bloom remains in active development. The next phase focuses on mobile usability, clearer product guidance, broader accessibility support and stronger production readiness.

Mobile UX refinement

Reduce visual density, simplify key controls and improve bottom-sheet interactions across smaller screens.

Clearer core loop

Make the relationship between routines, focus, progress and returning after missed days easier to understand at a glance.

Expanded accessibility controls

Add high-contrast support, reduced-motion preferences, stronger keyboard navigation and further screen-reader improvements.

Improved monitoring and testing

Expand automated frontend and backend tests, add stronger error tracking and improve deployment observability.