← Back to Projects

Fasted

Active

An offline-first biblical fasting companion PWA for a 190-day journey — daily plans, scripture, check-ins, journal, streaks, badges, and optional Supabase groups with Web Push reminders.

ReactTypeScriptViteTailwind CSSPWASupabaseDockerPlaywrightGitHub Actions
Fasted

Introduction

Fasted is a Progressive Web App for a structured biblical fasting journey spanning June 13 – December 19, 2026 (190 days, 8 phases). It answers the daily question — what does today ask of me? — with phase instructions, scripture, prayer focus, check-ins, journaling, and progress tracking.

Live: https://fasted.360web.cloud
Source: mitchelldawkinsjr/Fasted

Product narrative: Fasted: A 190-Day Biblical Fasting Companion.

Status: Active — Deployed on 360 Web Solutions Cloud. Offline-first by default; optional self-hosted Supabase for sync, groups, and Web Push. Also the production reference implementation for SEOS.

Fasted Today view with phase status, instructions, and check-in

Problem & Solution

The Problem

  • Long fasting plans collapse into forgotten PDFs and quiet group chats
  • Daily ambiguity (am I fasting today? water only?) kills consistency
  • Accountability tools often require accounts before the first useful screen
  • Community features usually force always-online architecture

The Solution

  1. Today-first UX — computed daily plan from phase schedule patterns
  2. Eight-phase journey — color-coded templates with food rules and prayer focus
  3. Offline-first storage — full core loop in localStorage / IndexedDB
  4. Optional Supabase — sync, groups, meal images, push subscriptions behind sign-in
  5. Installable PWA — Home Screen + offline shell + update toast

Architecture Overview

Fasted architecture diagram: PWA screens, local progress and plan engine, optional Supabase cloud
LayerImplementation
ClientReact 18, react-router 6, TypeScript, Vite 5, Tailwind 3
TypographyPlayfair Display (display) · Inter (body)
Install / offlinevite-plugin-pwa, no-cache SW/manifest, immutable hashed assets
Plan enginephaseTemplates + dailyPlan schedule interpreters
Local datafasted-calendar-progress:* JSON · meal images in IDB
Cloud (optional)Self-hosted Supabase auth, user_progress, groups, storage, push
QualityPlaywright e2e / visual / a11y · Vitest unit
DeployDocker nginx PWA · Actions deploy-vps.yml · SQL migrations

Journey & Plan Engine

Eight Fasted phases and the daily plan-pray-check-in-journal loop

Default journey (FASTED_JOURNEY) locks eight templates:

#PhasePattern highlight
1Daniel 1 Fast PatternWed sunrise–sunset water
2David's Fast for Seeking GodWed + Fri; coffee/tea allowed
3First Daniel Fast21 consecutive Daniel days
4Joel Repentance FastMon + Thu water fasts
5Isaiah 58 FastWed fast + weekly service acts
6Second Daniel Fast21 days + daily walk
7Esther PreparationRotating 24h / sunrise–sunset
8Year-End ConsecrationMon + Thu + Saturday prayer

getDailyPlan(date) resolves the active phase, whether the day is a fast day, instruction list, encouragement, and meditation verse. Custom journeys can be composed in Settings; the default remains locked for shared calendars.

Phases page grid of all eight Fasted Journey phase cards Phase artwork card for David's Fast for Seeking God

Core Screens

RouteRole
/ TodayPhase status, instructions, meditation, prayer, check-in, journal jump
/calendarFull journey grid — water drops (fast) · checks (check-in)
/journalReflection / prayer / gratitude / food / fitness · lightbox editor · export
/progressStreaks, phase %, badges, sacred milestones, mood visualizer
/phasesJourney overview with artwork and rules
/groups/*Community hub, detail, join codes, leader dashboard (auth)
/settingsSync, journeys, preferences, reminders, safety, export/import
Calendar page with phase chips and fast-day legend Progress dashboard with streaks and phase completion Journal page for daily reflections

Offline-First & Sync

Guest offline capabilities versus signed-in sync groups and push

Guest mode (default)

  • Progress key: fasted-calendar-progress:guest
  • Check-ins, journal, badges, journeys, settings persist locally
  • Export/import JSON (and print/PDF journal paths)

Signed-in mode

  • Scoped key fasted-calendar-progress:{userId}
  • Sync state machine: idle | syncing | synced | error | offline
  • Guest progress can migrate into the cloud account on first sign-in
  • RLS-backed tables for progress, groups, covenants, meal images, push subscriptions

Groups & Reminders

Groups require cloud sign-in:

  • Shared journal / prayer requests
  • Group commitments and member covenants
  • Leader dashboard for shepherding participation

Web Push (VAPID):

  • Morning reminder (user-editable, default 07:00)
  • Evening reminder (20:00)
  • Skip rules after today’s check-in / existing daily reflection
  • Cron sender on VPS every 15 minutes

Production Deploy

ItemDetail
URLhttps://fasted.360web.cloud
PWA containernginx serving Vite dist/
APISelf-hosted Supabase Kong (optional but used in prod)
SecretsVPS_SSH_KEY, VPS_HOST, VPS_USER
VariablesDEPLOY_DIR, SUPABASE_DIR, DOCKER_NETWORK, domains
MigrationsApplied on deploy when supabase-db is running
VPS_REMOTE=user@vps npm run deploy:vps
# or push to main with Actions configured

SEOS Reference

Fasted hosts the full SEOS agent stack in production — composed agent context, label state machines, specialist workflows, deploy health checks, and lesson accumulation. Product posts:

Local Development

git clone [email protected]:mitchelldawkinsjr/Fasted.git
cd Fasted
npm install
npm run dev

Optional cloud sync:

cp .env.example .env.local
# VITE_SUPABASE_URL + VITE_SUPABASE_ANON_KEY
npm run test:unit
npm run test:e2e

Safety

Fasting is a spiritual discipline, not medical treatment. Extended / no-water patterns include in-app safety notes. Users with medical concerns should consult a healthcare professional.

Fasted mobile Today screen Fasted PWA icon

Who This Is For

  • People walking a structured biblical fast
  • Small groups / church communities
  • Builders of offline-first PWAs
  • Developers interested in SEOS reference apps