Self-hosted · No app store

Pink Phone 🔥

A couple's secret garden.

An intimate PWA — not a dating app, not a social network — just for two (or a small group you trust). A laid-back shared journal, a daily "weather of desire", and playful dares. You host it. Your data stays on your server.

React PWARust / AxumPostgres Encrypted mediaAGPL-3.0

Three quiet little rituals

📖

A shared journal

Stories, photos & videos, emoji reactions (free/custom ones too) and comments. Drafts you can polish before sending.

🌦️

Weather of desire

Share your mood in one tap; it resets at midnight in your timezone. A hot or playful mood gently nudges the other.

🎲

Playful dares

Send little challenges with a tiny state machine — proposed → accepted / adjust → mission accomplished — plus a curated idea bank.

🤫

Sensual & safe media

Blurred by default, revealed by press-and-hold. Optional view-once mode, opt-in downloads you control, and encryptable at rest (AES-256-GCM).

⚡

Live & in sync

WebSocket real-time: new posts, moods, reactions and "✓✓ Seen" read receipts sync instantly. "What's new" badges at home.

🔒

Private by design

Self-hosted, no third parties, no telemetry. Email/password or OIDC/SSO, optional device PIN & biometric unlock. FR / EN, dark & cosy.

Soft, warm, deliberately not flat

Home — the daily weather of desire
Home
The shared journal
Journal
Dares and their state
Dares

Generated from Storybook with mock data — no real content.

🧱 The stack

  • Front — React 18 + TypeScript + Tailwind, shipped as an installable PWA (service worker, offline fonts).
  • Back — Rust / Axum + Tokio, Postgres via sqlx, JWT + Argon2id, Web Push, WebSocket.
  • Deploy — one Docker Compose: Postgres + API + nginx serving the PWA and reverse-proxying /api (same-origin).
  • Storybook-first — every component is built and validated in isolation before it reaches a screen.

🛡️ Yours, and only yours

  • Media served only through an authenticated route — never from a public folder.
  • Encrypted at rest (AES-256-GCM) with a key you control; key rotation supported.
  • Session revocation, content scoped per space, no cross-space leakage.
  • AGPL-3.0, no analytics, no external calls — runs entirely on your box.

Host it in a couple of minutes

Pull the published images, set three secrets, put a reverse proxy in front for TLS. That's it.