Your mind is an oracle. Not the kind that speaks in riddlesβthe kind that speaks only when you listen.
A personal journaling app built for long-term self-reflection. Write daily, look back across any point in time, and watch the shape of your own thinking emerge. Track the days across years.
![]() Welcome |
![]() Writing an entry |
![]() Profile |
Laocoon is a private space to record what matters. Each day you write β your thoughts, your clarity, your confusion. No audience. No rules.
But the real value comes later: return to any day, any year, and read the voice of who you were then. Watch patterns repeat. Measure the distance. Understand your own becoming.
The app is named for the Trojan priest Laocoon β a man who saw clearly when no one else would listen. This is built for that kind of clarity: not for being heard by the world, but for hearing yourself.
| Screen | Purpose |
|---|---|
| Home | Daily writing field β lined card, clear + save |
| Journal | Entry list and history |
| Calendar | Navigate any month/year, see days with entries highlighted, tap to preview |
| Profile | User profile: sign out, delete, downlaod data |
| Settings | App preferences: theme, languge, font size |
| About | App philosophy and story |
| Privacy Policy | App philosophy and story |
- React Native + Expo (file-based routing via Expo Router)
- TypeScript
- Supabase
- Custom design system in
styles/theme.tsβ dark ancient-world palette (gold/bronze accents, stone/ash text)
npm install
npx expo startOpens options to run on:
- iOS simulator
- Android emulator
- Web browser
- Expo Go (physical device)
More about project setup and gettign started here : setup
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Expo App β
β (iOS / Android / Web bundle via react-native-web) β
ββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
@supabase/supabase-js
β
ββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ
β Supabase β
β Auth (email + password, recovery, sessions) β
β Postgres (entries, user_profiles) β
β Row-level security (auth.uid() = owner) β
β Triggers (updated_at, handle_new_user) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Web: Expo exports a static bundle to
dist/vianpm run build:web(expo export --platform web).
More about app architecture and components here: Architecture
laocoon/
βββ app/ # Expo Router β file-based routes
β βββ _layout.tsx # Root Stack + AuthGate + PreferencesProvider
β βββ welcome.tsx # Public landing page (first stop for visitors)
β βββ privacy.tsx # Privacy Policy (public)
β βββ update-password.tsx # Postβreset-email password change (public)
β βββ settings.tsx # Theme, font size, default day view
β βββ about.tsx # App philosophy and story
β βββ (auth)/ # Unauthenticated stack
β β βββ _layout.tsx # Themed Stack navigator
β β βββ sign-in.tsx # Email + password login
β β βββ sign-up.tsx # Email + password + consent
β β βββ reset.tsx # "Forgot password?" form
β βββ (tabs)/ # Authenticated tab bar
β βββ _layout.tsx # Tabs: Home Β· Calendar Β· Journal Β· Profile
β βββ index.tsx # Home β daily writing surface
β βββ calendar.tsx # Calendar grid + "On this day" toggle
β βββ journal.tsx # Entry list Β· inline edit Β· delete
β βββ profile.tsx # Avatar Β· stats Β· nav Β· export Β· delete Β· sign out
βββ assets/
β βββ app-icons/ # App icon variants (multiple resolutions)
β βββ cards/ # Dark-theme background card images
β βββ cards-light/ # Light-theme background card images
β βββ icons/ # Custom SVG icon library
β βββ splash/ # Splash screen assets
βββ components/
β βββ AppText.tsx # Font-size-scaling `Text` wrapper
βββ docs/
β βββ laocoon-spec.md # Living architecture reference
β βββ setup_tutorial.md # Local dev + Vercel deploy tutorial
β βββ about.md # Draft copy for the About page
β βββ db/
β βββ supabase-setup.sql # Idempotent DB setup (tables, RLS, triggers)
βββ lib/
β βββ supabase.ts # Supabase client + platform storage adapter
β βββ session.tsx # Session context and hook
β βββ entries.ts # Entry CRUD helpers
β βββ preferences.tsx # Prefs context (theme / font / default view)
β βββ legal.ts # PRIVACY_POLICY_VERSION + effective date
βββ styles/
β βββ theme.ts # Dark palette + `useTheme()` + card asset registry
β βββ themeLight.ts # Light palette bundle
βββ vercel.json # Vercel build config with SPA rewrite
βββ package.json
More about project architecture and structure here: Client architecture
- Daily entries β title (optional) + free-form text, saved to your account.
- Journal history β list every entry you've written, edit in place, or delete.
- Calendar view β see the whole month at a glance; days with entries are highlighted and badged with the count.
- "On this day" β retrospective view of what you wrote on the same day across previous years.
- Tap any day β opens a centered modal with each entry for that day, timestamped.
- Dark / Light / System themes β full palette swap, live. System follows your OS setting.
- Font size β Small / Default / Large, applied across every screen via a text wrapper.
- Default day view β pick whether the Calendar tab opens on the grid or on "On this day".
- Local persistence β preferences survive reload on web (localStorage) and app kill on native (AsyncStorage).
- Email + password sign-up with a Privacy Policy consent checkbox (not pre-checked).
- Forgot password flow β reset link by email, land on a dedicated screen to set a new one.
- Sign out and delete my account from Profile.
- Session persistence across reloads.
- Row-level security in Postgres β users can only ever read or write their own rows.
- EU-hosted data (Supabase Frankfurt) for GDPR compliance.
- Privacy Policy page with semver versioning + human-readable effective date.
- Export my data β one-click JSON download of every entry (web).
- Delete my account β cascade-wipes your entries and flags the auth record for removal.
- No trackers, no analytics cookies β nothing beyond what's needed to keep you signed in.
- One codebase ships to iOS, Android, and the web via Expo +
react-native-web. - Deep links work: hard-loading
/settingsor/privacyresolves on Vercel via SPA rewrite. - Themed native headers on pushed pages (About / Settings / Privacy) with a proper back button.
- π£οΈ Multi-language support
- π± Text-emotion detection
Pavlo Mospan(c) 2026.
- πΌ Data Scientist / AI Engineer
- π Augsburg, Germany
If you like this project:
- βοΈ Star the repo
- π΄ Fork it
- π§ Share ideas
Your thoughts. Your timeline. Your truth.


