Skip to content

Drakkar-Software/Fiance

Repository files navigation

Fiancé

Fiancé

Plan your dream wedding — privately, offline-first, beautifully.

One app. Every device. Zero compromises on your data.

Expo SDK 57 React Native TypeScript Cloudflare License

🌐 Try the Web App →


What is Fiancé?

Fiancé is a privacy-first wedding planning app for couples who want full control over their big day — and their data. Everything lives on your device. Sync is optional, encrypted end-to-end, and zero-knowledge.

Available on iOS, Android, and Web from a single codebase.


Features

👥 Guest Management Track RSVPs, dietary needs, plus-ones, and table assignments. Never lose track of who's coming.

💌 Invitation Tracking Log every send — type, date, notes. Custom invitation categories with accommodation needs per group.

🏨 Accommodations Manage hotels for out-of-town guests: check-in/out dates, bed count, price per night.

💬 Guest Communications Keep a full log of every message, call, and email with your guests.

💰 Budget Tracker Visual breakdowns by vendor category. Know exactly where every euro goes.

📋 Planning Task management with priorities and deadlines — from "12 months before" to day-of checklists.

🎭 Wedding Party & Roles Assign officiants, witnesses, and ceremony roles to guests — or to people outside your guest list.

🪑 Seating Constraints Must-sit-together / must-not-sit-together rules, with automatic conflict warnings on the seating plan and table list.

📅 Multi-Day Events Civil ceremony, religious ceremony, cocktail, dinner, brunch — each with its own date, time, and venue, shown on the public page timeline.

🍽️ Meal Choices Per-guest, per-event menu selection with a one-click caterer menu summary export.

🚌 Guest Logistics Shuttle assignment, parking needs, and arrival notes per guest, with a dedicated logistics export.

🏢 Vendor Directory Compare vendors across 20+ categories. Side-by-side comparison for any category — mark a winner, only they count toward your budget.

🖼️ Mood Board Collect inspiration images, tag them, and organize into themed collections.

🎁 Gift List Track your gift registry — home, travel, experience, and more — with purchase status.

📸 Event Photos Collect and organize wedding day memories in a shared photo gallery.

🌐 Public Wedding Page Shareable page for guests: program, RSVP, practical info. No account needed.

⏱️ Wedding Day View Live countdown and day-of agenda — your schedule at a glance as the day unfolds.

📨 Communication Templates Reusable email, SMS, and postal templates with {{guest.firstName}}-style placeholders.

📎 Documents Attach quotes, contracts, and files to vendors, guests, or legal milestones — stored on-device, binaries never leave your phone.

⚖️ Legal & Admin Checklist Civil-marriage milestones (bans, city hall appointment, contract signing) with due dates and a dashboard reminder.

🌴 Honeymoon Planner Destination, dates, budget vs. spent, and a day-by-day itinerary.

Also: Export to PDF/CSV · Data backup & restore · Multi-wedding support · PWA installable · App Lock (PIN + biometrics) · Cloud backup (AES-256-GCM, zero-knowledge) · Full French & English localization


Tech Stack

Cross-platform Expo SDK 57 + Expo Router (iOS, Android, Web)
UI React Native + NativeWind v5 (Tailwind CSS)
State Zustand v5
Sync @drakkar.software/dk-spaces-sdk (Starfish client) — AES-256-GCM E2EE object-space sync
Security expo-secure-store · expo-local-authentication · expo-crypto
Forms React Hook Form + Zod
i18n i18next (FR / EN)
Testing Vitest + Storybook v10

Quick Start

# Install
pnpm install

# Run
pnpm --filter fiance start          # Expo dev server
pnpm --filter fiance run ios        # iOS simulator
pnpm --filter fiance run android    # Android emulator
pnpm --filter fiance run web        # Browser

# Test & build
pnpm test
pnpm --filter fiance build:web

Prerequisites: Node.js 18+, pnpm, Expo CLI


Cloud Sync (Starfish)

Sync is 100% optional — all data stays on-device by default.

To enable: go to Settings › Synchronisation and enter your Starfish server URL + auth token. An AES-256-GCM key is generated on-device and stored in the secure keychain. The server only ever sees encrypted blobs.

# Point the app at the production drakkar_sync server (dk namespace)
echo 'EXPO_PUBLIC_SYNC_URL=https://sync.drakkar.software/sync' > apps/mobile/.env.local
pnpm --filter fiance run web

How it Works

Zustand Stores  →  KV-store (expo-kv)  →  Starfish Server
     ↑                    ↑                      ↑
  Runtime state     Persisted on-device     Encrypted sync
  guests, budget,   hydrated on boot,      (optional, zero-
  planning, etc.    write-through           knowledge)

The codebase is a pnpm monorepo:

apps/
  mobile/          Expo app — iOS · Android · Web
    app/(tabs)/    Screens: guests · planning · vendors · budget · ideas
    components/    App-specific components
    store/         Zustand domain stores
    lib/           Sync, crypto, persistence, budget, planning logic
packages/
  fiance-sdk/      Pure headless business logic — no React Native deps
  fiance-ui/       Shared UI components, primitives, and utils

Storybook

Browse and test all UI components in isolation:

pnpm --filter fiance storybook      # http://localhost:6006

Connect Claude Code to Storybook via MCP for AI-assisted component development:

claude mcp add storybook-mcp --transport http http://localhost:6006/mcp --scope project

Deploy

Target Command CI
Web (Cloudflare Pages) pnpm --filter fiance build:web Push to main
Android APK (EAS) npx eas-cli build --platform android --profile preview Push to main
Sync server Managed by Drakkar-Software/Infra (drakkar_sync) Infra repo deploy

iOS Submission (Xcode CLI)

pnpm --filter fiance submit:ios:xcode -- path/to/app.ipa uploads a built .ipa to App Store Connect via xcrun altool, authenticated with an App Store Connect API key (Apple ID + app-specific password auth is deprecated for altool).

Generate the key (one-time, per Apple Developer account):

  1. Go to App Store Connect → Users and Access → Integrations → App Store Connect API.
  2. Click Generate API Key (or +), name it, and give it the App Manager role (or higher).
  3. Download the .p8 file — Apple only lets you download it once.
  4. Note the Key ID and Issuer ID shown next to the key.

Install the key locally (one-time, per machine):

mkdir -p ~/.appstoreconnect/private_keys
mv ~/Downloads/AuthKey_<KEY_ID>.p8 ~/.appstoreconnect/private_keys/

Run the upload:

export ASC_API_KEY_ID=<KEY_ID>
export ASC_API_ISSUER_ID=<ISSUER_ID>
pnpm --filter fiance submit:ios:xcode -- path/to/app.ipa

Private project · Built with love for the big day

About

Privacy-first, offline-first wedding planning app.

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages