Project 01 / Full-stack application
CareCircle.
A little less juggling for
the people caring for someone.
A shared workspace for families coordinating tasks, appointments, rides and updates, with space for private reflection.
- My contribution
- Interface, application & data model
- Core stack
- Next.js · TypeScript · PostgreSQL
- Project context
- Independent portfolio project
Project screenshots use fictional people and activities. This page showcases the application; it is not a live app session.
01 / The problem
Care is shared.
The details get scattered.
When several people support someone with a serious health condition, practical details can end up spread across messages and calendars. Who is taking the next appointment? Has someone arranged the ride? Which tasks still need a hand?
I built CareCircle around a care circle: a shared place to see responsibilities, coordinate plans and keep useful context together. The design separates shared logistics from a person’s private journal.
Being a coordinator should help someone organize care. It should not give them access to another person’s private reflections.
02 / The experience
One workspace.
Clear responsibilities.
-
Tasks that stay actionable
Create, assign, filter, complete and reopen tasks. Paginated lists keep older responsibilities reachable.
-
Appointments connected to real plans
Coordinate pickups and drivers alongside visits. Rescheduling asks people to review linked rides rather than silently shifting them.
-
Updates with context
Share family notes, discuss individual tasks and follow an activity history with current permissions enforced.
-
A deliberate boundary around journals
Entries begin private. Their author can share an entry, withdraw it, archive it and restore it privately.
03 / The architecture
Simple to follow.
Explicit at each boundary.
Next.js and React provide the interface and server routes. Domain services check permissions and apply changes through Drizzle transactions. PostgreSQL holds accounts, memberships and coordination records; PGlite runs the same schema for the single-process local demo.
- 01InterfaceReact + TypeScript
- 02Identity & rulesBetter Auth + services
- 03TransactionsDrizzle + PostgreSQL
The browser supplies requested changes. The server derives identity from the session, verifies current membership and validates the payload. Changes and their audit metadata commit together.
04 / The decisions
The work behind
a dependable interaction.
Permissions extend into the database.
Circle-scoped queries and composite foreign keys prevent records from linking an assignee, driver or appointment from a different circle. Revocation takes effect on the next authorized request, including with an existing session.
A competing edit should not erase a draft.
Version checks reject stale saves. The interface keeps the draft and offers an explicit saved-version reload. Appointment changes also compare the set of linked ride plans the person actually reviewed.
Privacy applies before pagination.
Journal visibility rules run in SQL before the page limit. Activity excludes journal events for every role and restricts access-management history to current coordinators.
A time needs a timezone.
Appointment and pickup inputs use the circle’s timezone. Skipped daylight-saving times are rejected; repeated times require an explicit offset choice.
Recovery is something to verify.
A disposable PostgreSQL restore drill compares all application and migration data before and after a custom-format backup. Reapplying migrations is checked too.
05 / The verification
Evidence beyond
the happy path.
Local verification covers permissions, concurrent writes, failed transactions, edit conflicts, privacy, keyboard dialogs and browser security.
- Core tests
- 128API, configuration, persistence & migrations
- Browser cases
- 78Desktop & mobile Chromium emulation
- PostgreSQL HTTP tests
- 111The HTTP subset repeated on PostgreSQL 17.11
- Restore integrity
- 16 / 47Tables / fictional rows with matching SHA-256 fingerprints
Seven preserved prototype regression tests also pass. Lint, strict types, formatting and the production build pass. Browser cases include blocked injected scripts/styles under nonce-based CSP, working authenticated navigation and session-cookie checks.
What these checks establish
Results were verified locally on Windows on November 12, 2026. The 111 PostgreSQL HTTP tests repeat the HTTP subset of the core suite; they are not 111 additional unique cases.
Mobile browser cases use Chromium emulation. Safari and physical-device compatibility remain unverified. The GitHub Actions workflow is configured but has not run remotely. A local restore drill does not establish scheduled production backups or point-in-time recovery.
06 / What comes next
A finished portfolio version.
Room to keep learning.
The central coordination workflows are implemented. A public interactive demo still needs its own hosting, database, proxy/TLS checks and fictional-data reset policy. Notifications, calendar views and verified account onboarding remain possible future milestones.
CareCircle is an engineering portfolio project using fictional content. It makes no claim of real-world adoption or healthcare compliance.
Talk about the projectThanks for taking a look


