Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

37 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“˜ LAOCOON β€” The Flame & The Scroll

React Native Expo Supabase Vercel Status License Made with Love Maintained

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.


🎬 Preview


Welcome

Writing an entry

Profile

🌐 Live Demo

πŸ’‘ Concept

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.


πŸ“± Screens

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

βš™οΈ Tech Stack

  • 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)

🏁 Getting Started

npm install
npx expo start

Opens options to run on:

  • iOS simulator
  • Android emulator
  • Web browser
  • Expo Go (physical device)

More about project setup and gettign started here : setup


πŸ—οΈ Architecture

   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚                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/ via npm run build:web (expo export --platform web).

More about app architecture and components here: Architecture


πŸ“‚ Project 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


πŸ”₯ Features

Writing & reflection

  • 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.

Personalisation

  • 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).

Auth & account

  • 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.

Privacy & data

  • 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.

Cross-platform

  • One codebase ships to iOS, Android, and the web via Expo + react-native-web.
  • Deep links work: hard-loading /settings or /privacy resolves on Vercel via SPA rewrite.
  • Themed native headers on pushed pages (About / Settings / Privacy) with a proper back button.

🧠 Future Improvements

  • πŸ—£οΈ Multi-language support
  • 😱 Text-emotion detection

πŸ‘¨β€πŸ’» Author

Pavlo Mospan(c) 2026.

  • πŸ’Ό Data Scientist / AI Engineer
  • 🌍 Augsburg, Germany

⭐️ Show your support

If you like this project:

  • ⭐️ Star the repo
  • 🍴 Fork it
  • 🧠 Share ideas

Your thoughts. Your timeline. Your truth.

About

Write down everyday thoughts and track them in history

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages