diff --git a/README.md b/README.md
index e6aee82..4245a86 100644
--- a/README.md
+++ b/README.md
@@ -13,10 +13,10 @@
Built with passion, technology, and the fearless spirit of sexual empowerment
-[](https://github.com/valknarxxx/sexy.pivoine.art/actions/workflows/docker-build-push.yml)
-[](https://github.com/valknarxxx/sexy.pivoine.art/actions/workflows/docker-scan.yml)
+[](https://dev.pivoine.art/valknar/sexy.pivoine.art/actions)
+[](https://dev.pivoine.art/valknar/sexy.pivoine.art/actions)
[](LICENSE)
-[](http://sexy.pivoine.art)
+[](https://sexy.pivoine.art)
@@ -24,20 +24,23 @@ Built with passion, technology, and the fearless spirit of sexual empowerment
## ๐
What Is This Delicious Creation?
-Welcome, dear pleasure-seeker! This is **sexy.pivoine.art** โ a modern, sensual platform combining the elegance of **SvelteKit**, the power of **Directus CMS**, and the intimate connection of **Buttplug.io** hardware integration.
+Welcome, dear pleasure-seeker! This is **sexy.pivoine.art** โ a modern, sensual platform built from the ground up with full control over every intimate detail. A **SvelteKit** frontend caresses a purpose-built **Fastify + GraphQL** backend, while **Buttplug.io** hardware integration brings the experience into the physical world.
Like Beate Uhse breaking barriers in post-war Germany, we believe in the freedom to explore, create, and celebrate sexuality without shame. This platform is built for **models**, **creators**, and **connoisseurs** of adult content who deserve technology as sophisticated as their desires.
### โ Features That'll Make You Blush โ
- ๐ **Sensual SvelteKit Frontend** with Tailwind CSS 4 styling
-- ๐๏ธ **Headless CMS** powered by Directus for content liberation
+- โก **Purpose-built GraphQL Backend** โ lean, fast, no CMS overhead
+- ๐ **Session-based Auth** with Redis & Argon2 โ discretion guaranteed
+- ๐ผ๏ธ **Smart Image Transforms** via Sharp (WebP, multiple presets, cached)
- ๐ฎ **Hardware Integration** via Buttplug.io (yes, really!)
-- ๐ **Multi-Platform Support** (AMD64 + ARM64) โ pleasure everywhere
-- ๐ **Session-Based Authentication** โ discretion guaranteed
- ๐ฑ **Responsive Design** that looks sexy on any device
- ๐ **Internationalization** โ pleasure speaks all languages
+- ๐ **Gamification** โ achievements, leaderboards, and reward points
+- ๐ฌ **Comments & Social** โ build your community
- ๐ **Analytics Integration** (Umami) โ know your admirers
+- ๐ณ **Self-hosted CI/CD** via Gitea Actions on `dev.pivoine.art`
@@ -48,15 +51,21 @@ Like Beate Uhse breaking barriers in post-war Germany, we believe in the freedom
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ Frontend Layer โ
-โ โโ SvelteKit 2.0 โ Smooth as silk โ
+โ โโ SvelteKit 2 โ Smooth as silk โ
โ โโ Tailwind CSS 4 โ Styled to seduce โ
โ โโ bits-ui Components โ Building blocks of pleasure โ
+โ โโ graphql-request v7 โ Whispering to the backend โ
โ โโ Vite โ Fast and furious โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ท Backend Layer โ
-โ โโ Directus CMS โ Content with no limits โ
-โ โโ Custom Extensions โ Bespoke pleasures โ
-โ โโ PostgreSQL โ Data deep and secure โ
+โ โโ Fastify v5 โ The fastest penetration โ
+โ โโ GraphQL Yoga v5 โ Flexible positions โ
+โ โโ Pothos (code-first) โ Schema with intention โ
+โ โโ Drizzle ORM โ Data with grace โ
+โ โโ PostgreSQL 16 โ Deep and persistent โ
+โ โโ Redis โ Sessions that never forget โ
+โ โโ Sharp โ Images transformed beautifully โ
+โ โโ Argon2 โ Passwords hashed with passion โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Hardware Layer โ
โ โโ Buttplug.io โ Real connections โ
@@ -65,8 +74,8 @@ Like Beate Uhse breaking barriers in post-war Germany, we believe in the freedom
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ธ DevOps Layer โ
โ โโ Docker โ Containerized ecstasy โ
-โ โโ GitHub Actions โ Automated seduction โ
-โ โโ GHCR โ Images served hot โ
+โ โโ Gitea Actions โ Self-hosted seduction โ
+โ โโ dev.pivoine.art โ Our own pleasure palace โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
@@ -74,23 +83,23 @@ Like Beate Uhse breaking barriers in post-war Germany, we believe in the freedom
## ๐ฅ Quick Start โ Get Intimate Fast
-### ๐ Option 1: Using Docker (Recommended)
+### ๐ Option 1: Using Docker Compose (Recommended)
```bash
-# Pull the pleasure
-docker pull ghcr.io/valknarxxx/sexy:latest
+# Clone the repository
+git clone https://dev.pivoine.art/valknar/sexy.pivoine.art.git
+cd sexy.pivoine.art
-# Run with passion
-docker run -d -p 3000:3000 \
- -e PUBLIC_API_URL=https://api.your-domain.com \
- -e PUBLIC_URL=https://your-domain.com \
- ghcr.io/valknarxxx/sexy:latest
+# Configure your secrets
+cp .env.example .env
+# Edit .env with your intimate details
+
+# Awaken all services (postgres, redis, backend, frontend)
+docker compose up -d
# Visit your creation at http://localhost:3000 ๐
```
-See [QUICKSTART.md](QUICKSTART.md) for the full seduction guide.
-
### ๐ Option 2: Local Development
**Prerequisites:**
@@ -98,22 +107,25 @@ See [QUICKSTART.md](QUICKSTART.md) for the full seduction guide.
1. Node.js 20.19.1 โ *the foundation*
2. `corepack enable` โ *unlock the tools*
3. `pnpm install` โ *gather your ingredients*
-4. Rust + `cargo install wasm-bindgen-cli` โ *forge the connection*
+4. PostgreSQL 16 + Redis โ *the data lovers*
**Start your pleasure journey:**
```bash
-# Awaken all services
-pnpm dev
+# Awaken data services
+pnpm dev:data
-# Or tease them one by one
-pnpm dev:data # The foundation
-pnpm dev:directus # The content
-pnpm --filter @sexy.pivoine.art/frontend dev # The face
+# Start the backend (port 4000)
+pnpm dev:backend
+
+# Start the frontend (port 3000, proxied to :4000)
+pnpm --filter @sexy.pivoine.art/frontend dev
```
Visit `http://localhost:3000` and let the experience begin... ๐
+GraphQL playground is available at `http://localhost:4000/graphql` โ explore every query.
+
---
## ๐น Project Structure
@@ -123,98 +135,116 @@ This monorepo contains three packages, each serving its purpose:
```
sexy.pivoine.art/
โโ ๐ packages/frontend/ โ SvelteKit app (the seduction)
-โโ ๐ญ packages/bundle/ โ Directus extensions (the power)
+โโ โก packages/backend/ โ Fastify + GraphQL API (the engine)
โโ ๐ฎ packages/buttplug/ โ Hardware control (the connection)
```
----
+### ๐ Frontend (`packages/frontend/`)
-## ๐ Documentation โ Your Guide to Pleasure
+SvelteKit 2 application with server-side rendering, i18n, and a clean component library.
+Communicates with the backend exclusively via GraphQL using `graphql-request`.
+Assets served via `/api/assets/:id?transform=
` โ no CDN, no Directus, just raw power.
-
+### โก Backend (`packages/backend/`)
-| Document | Purpose | Emoji |
-|----------|---------|-------|
-| [QUICKSTART.md](QUICKSTART.md) | Get wet... I mean, get started! | ๐ฆ |
-| [COMPOSE.md](COMPOSE.md) | Docker Compose setup guide | ๐ณ |
-| [DOCKER.md](DOCKER.md) | Standalone Docker deployment | ๐ |
-| [CLAUDE.md](CLAUDE.md) | Architecture & development | ๐ค |
-| [.github/workflows/README.md](.github/workflows/README.md) | CI/CD workflows | โ๏ธ |
+Purpose-built Fastify v5 + GraphQL Yoga server. All business logic lives here:
+auth, file uploads, video processing, comments, gamification, and analytics.
+Files stored as `//` with on-demand WebP transforms cached on disk.
-
+### ๐ฎ Buttplug (`packages/buttplug/`)
+
+Hybrid TypeScript/Rust package for intimate hardware control via WebBluetooth.
+Compiled to WebAssembly for browser-based Bluetooth device communication.
---
-## ๐จ Building โ Craft Your Masterpiece
+## ๐๏ธ Database Schema
-### Build All Packages
+Built with Drizzle ORM โ clean tables, no `directus_` prefix, full control:
-```bash
-# Prepare everything
-pnpm install
-
-# Build the WASM foundation
-pnpm --filter @sexy.pivoine.art/buttplug build:wasm
-
-# Build the packages
-pnpm --filter @sexy.pivoine.art/buttplug build
-pnpm --filter @sexy.pivoine.art/frontend build
-pnpm --filter @sexy.pivoine.art/bundle build
```
-
-### Build Docker Image
-
-```bash
-# Quick build
-./build.sh
-
-# Manual control
-docker build -t sexy.pivoine.art:latest .
-
-# Multi-platform pleasure
-docker buildx build --platform linux/amd64,linux/arm64 -t sexy.pivoine.art:latest .
+users โ profiles, roles (model/viewer/admin), auth tokens
+files โ uploaded assets with metadata and duration
+videos โ content with model junctions, likes, plays
+articles โ magazine / editorial content
+recordings โ user-created content with play tracking
+comments โ threaded by collection + item_id
+achievements โ gamification goals
+user_points โ points ledger
+user_stats โ cached leaderboard data
```
---
-## ๐ Deployment โ Share Your Creation
+## ๐ Authentication Flow
+
+```
+POST /graphql (login mutation)
+ โ verify argon2 password hash
+ โ nanoid(32) session token
+ โ SET session: EX 86400 in Redis
+ โ set httpOnly cookie: session_token
+ โ return CurrentUser
+
+Every request:
+ โ read session_token cookie
+ โ GET session: from Redis
+ โ inject currentUser into GraphQL context
+```
+
+---
+
+## ๐ผ๏ธ Image Transforms
+
+Assets are transformed on first request and cached as WebP:
+
+| Preset | Size | Fit | Use |
+|--------|------|-----|-----|
+| `mini` | 80ร80 | cover | Avatars in lists |
+| `thumbnail` | 300ร300 | cover | Profile photos |
+| `preview` | 800px wide | inside | Video teasers |
+| `medium` | 1400px wide | inside | Full-size images |
+| `banner` | 1600ร480 | cover | Profile banners |
+
+---
+
+## ๐ Deployment
### Production with Docker Compose
```bash
# Configure your secrets
-cp .env.production.example .env.production
-# Edit .env.production with your intimate details
+cp .env.example .env.production
+# Edit .env.production โ set DB credentials, SMTP, cookie secret, CORS origin
-# Deploy with grace (uses Traefik for routing)
-docker-compose -f compose.production.yml --env-file .env.production up -d
+# Deploy
+docker compose --env-file .env.production up -d
```
-### Production without Docker
+Key environment variables for the backend:
-```bash
-# Build everything
-pnpm build:frontend
-
-# Start serving
-pnpm --filter @sexy.pivoine.art/frontend start
+```env
+DATABASE_URL=postgresql://sexy:sexy@postgres:5432/sexy
+REDIS_URL=redis://redis:6379
+COOKIE_SECRET=your-very-secret-key
+CORS_ORIGIN=https://sexy.pivoine.art
+UPLOAD_DIR=/data/uploads
+SMTP_HOST=your.smtp.host
+SMTP_PORT=587
+EMAIL_FROM=noreply@sexy.pivoine.art
+PUBLIC_URL=https://sexy.pivoine.art
```
----
+### ๐ฌ CI/CD โ Self-Hosted Seduction
-## ๐ Environment Variables
+Automated builds run on **[dev.pivoine.art](https://dev.pivoine.art/valknar/sexy.pivoine.art)** via Gitea Actions:
-### ๐ Required (The Essentials)
+- โ
Frontend image โ `dev.pivoine.art/valknar/sexy:latest`
+- โ
Backend image โ `dev.pivoine.art/valknar/sexy-backend:latest`
+- โ
Triggers on push to `main`, `develop`, or version tags (`v*.*.*`)
+- โ
Build cache via registry for fast successive builds
-- `PUBLIC_API_URL` โ Your Directus backend
-- `PUBLIC_URL` โ Your frontend domain
-
-### ๐ Optional (The Extras)
-
-- `PUBLIC_UMAMI_ID` โ Analytics tracking ID
-- `PUBLIC_UMAMI_SCRIPT` โ Umami script URL
-
-See [.env.production.example](.env.production.example) for the full configuration.
+Images are pulled on the production server via Watchtower or manual `docker compose pull && docker compose up -d`.
---
@@ -225,60 +255,54 @@ graph LR
A[๐ก Idea] --> B[๐ป Code]
B --> C[๐งช Test Locally]
C --> D[๐ฟ Feature Branch]
- D --> E[๐ค Push & PR]
- E --> F{โ
CI Pass?}
+ D --> E[๐ค Push to dev.pivoine.art]
+ E --> F{โ
Build Pass?}
F -->|Yes| G[๐ Merge to Main]
F -->|No| B
- G --> H[๐ Auto Deploy]
- H --> I[๐ท๏ธ Tag Release]
- I --> J[๐ Celebrate]
+ G --> H[๐ Images Built & Pushed]
+ H --> I[๐ Deploy to Production]
```
1. Create โ `git checkout -b feature/my-sexy-feature`
2. Develop โ Write beautiful code
-3. Test โ `pnpm dev`
-4. Push โ Create PR (triggers CI build)
-5. Merge โ Automatic deployment to production
+3. Test โ `pnpm dev:data && pnpm dev:backend && pnpm dev`
+4. Push โ `git push` to `dev.pivoine.art` (triggers CI build)
+5. Merge โ Images published, deploy to production
6. Release โ `git tag v1.0.0 && git push origin v1.0.0`
---
-## ๐ Security โ Protected Pleasure
+## ๐ Environment Variables
-- ๐ก๏ธ Daily vulnerability scans with Trivy
-- ๐ Non-root Docker containers
-- ๐ Security reports in GitHub Security tab
-- ๐ค Confidential issue reporting available
+### Backend (required)
-*Report security concerns privately via GitHub Security.*
+| Variable | Description |
+|----------|-------------|
+| `DATABASE_URL` | PostgreSQL connection string |
+| `REDIS_URL` | Redis connection string |
+| `COOKIE_SECRET` | Session cookie signing secret |
+| `CORS_ORIGIN` | Allowed frontend origin |
+| `UPLOAD_DIR` | Path for uploaded files |
----
+### Backend (optional)
-## ๐ Contributing โ Join the Movement
+| Variable | Default | Description |
+|----------|---------|-------------|
+| `PORT` | `4000` | Backend listen port |
+| `LOG_LEVEL` | `info` | Fastify log level |
+| `SMTP_HOST` | โ | Email server for auth flows |
+| `SMTP_PORT` | `587` | Email server port |
+| `EMAIL_FROM` | โ | Sender address |
+| `PUBLIC_URL` | โ | Frontend URL (for email links) |
-Like Beate Uhse fought for sexual liberation, we welcome contributors who believe in freedom, pleasure, and quality code.
+### Frontend
-1. **Fork** this repository
-2. **Create** your feature branch
-3. **Commit** your changes
-4. **Push** to your branch
-5. **Submit** a pull request
-
-All contributors are bound by our code of conduct: **Respect, Consent, and Quality.**
-
----
-
-## ๐ฏ CI/CD Pipeline โ Automated Seduction
-
-Our GitHub Actions workflows handle:
-
-- โ
Multi-platform Docker builds (AMD64 + ARM64)
-- โ
Automated publishing to GHCR
-- โ
Daily security vulnerability scans
-- โ
Weekly cleanup of old images
-- โ
Semantic versioning from git tags
-
-**Images available at:** `ghcr.io/valknarxxx/sexy`
+| Variable | Description |
+|----------|-------------|
+| `PUBLIC_API_URL` | Backend URL (e.g. `http://sexy_backend:4000`) |
+| `PUBLIC_URL` | Frontend public URL |
+| `PUBLIC_UMAMI_ID` | Umami analytics site ID (optional) |
+| `PUBLIC_UMAMI_SCRIPT` | Umami script URL (optional) |
---
@@ -288,7 +312,7 @@ Our GitHub Actions workflows handle:
### ๐ธ Created with Love by ๐ธ
-**[Palina](http://sexy.pivoine.art) & [Valknar](http://sexy.pivoine.art)**
+**[Palina](https://sexy.pivoine.art) & [Valknar](https://sexy.pivoine.art)**
*Fรผr die Mรคuse...* ๐ญ๐
@@ -298,10 +322,15 @@ Our GitHub Actions workflows handle:
| Technology | Purpose |
|------------|---------|
-| [SvelteKit](https://kit.svelte.dev/) | Framework |
-| [Directus](https://directus.io/) | CMS |
+| [SvelteKit](https://kit.svelte.dev/) | Frontend framework |
+| [Fastify](https://fastify.dev/) | HTTP server |
+| [GraphQL Yoga](https://the-guild.dev/graphql/yoga-server) | GraphQL server |
+| [Pothos](https://pothos-graphql.dev/) | Code-first schema |
+| [Drizzle ORM](https://orm.drizzle.team/) | Database |
+| [Sharp](https://sharp.pixelplumbing.com/) | Image transforms |
| [Buttplug.io](https://buttplug.io/) | Hardware |
-| [bits-ui](https://www.bits-ui.com/) | Components |
+| [bits-ui](https://www.bits-ui.com/) | UI components |
+| [Gitea](https://dev.pivoine.art) | Self-hosted VCS & CI |
---
@@ -331,9 +360,9 @@ Pilot, Entrepreneur, Freedom Fighter
-[](https://github.com/valknarxxx/sexy.pivoine.art/issues)
-[](https://github.com/valknarxxx/sexy.pivoine.art/discussions)
-[](http://sexy.pivoine.art)
+[](https://dev.pivoine.art/valknar/sexy.pivoine.art)
+[](https://dev.pivoine.art/valknar/sexy.pivoine.art/issues)
+[](https://sexy.pivoine.art)
@@ -354,6 +383,6 @@ Pilot, Entrepreneur, Freedom Fighter
*Pleasure is a human right. Technology is freedom. Together, they are power.*
-**[sexy.pivoine.art](http://sexy.pivoine.art)** | ยฉ 2025 Palina & Valknar
+**[sexy.pivoine.art](https://sexy.pivoine.art)** | ยฉ 2025 Palina & Valknar