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.example .env.production
# Edit .env.production โ set DB credentials, SMTP, cookie secret, CORS origin
# Deploy
docker compose --env-file .env.production up -d
```
Key environment variables for the backend:
```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
Automated builds run on **[dev.pivoine.art](https://dev.pivoine.art/valknar/sexy.pivoine.art)** via Gitea Actions:
- โ
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
Images are pulled on the production server via Watchtower or manual `docker compose pull && docker compose up -d`.
---
## ๐ญ Development Workflow
```mermaid
graph LR
A[๐ก Idea] --> B[๐ป Code]
B --> C[๐งช Test Locally]
C --> D[๐ฟ Feature Branch]
D --> E[๐ค Push to dev.pivoine.art]
E --> F{โ
Build Pass?}
F -->|Yes| G[๐ Merge to Main]
F -->|No| B
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: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`
---
## ๐ Environment Variables
### Backend (required)
| 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)
| 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) |
### Frontend
| 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) |
---
## ๐ Credits & Acknowledgments
### ๐ธ Created with Love by ๐ธ
**[Palina](https://sexy.pivoine.art) & [Valknar](https://sexy.pivoine.art)**
_Fรผr die Mรคuse..._ ๐ญ๐
---
### ๐ Built With
| Technology | Purpose |
| --------------------------------------------------------- | -------------------- |
| [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/) | UI components |
| [Gitea](https://dev.pivoine.art) | Self-hosted VCS & CI |
---
### ๐ Inspired by Beate Uhse
Pioneer of sexual liberation (1919-2001)
Pilot, Entrepreneur, Freedom Fighter
_"Eine Frau, die ihre Sexualitรคt selbstbestimmt lebt, ist eine freie Frau."_

---
## โ๏ธ License & Legal
- ๐ See [LICENSE](LICENSE) file for details
- ๐ **18+ Only** โ This platform is for adults
- ๐ Users must be of legal age in their jurisdiction
- โ๏ธ We support equality, freedom, and consensual pleasure
---
## ๐ฌ Support & Community
[](https://dev.pivoine.art/valknar/sexy.pivoine.art)
[](https://dev.pivoine.art/valknar/sexy.pivoine.art/issues)
[](https://sexy.pivoine.art)
---
### ๐ Made with ๐ for Freedom, Pleasure & Technology ๐
โโโโโโโ โโโโโโโโโโโ โโโโโโ โโโ
โโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโ
โโโโโโโ โโโโโโ โโโโโโ โโโโโโโ
โโโโโโโ โโโโโโ โโโโโโ โโโโโ
โโโโโโโโ โโโโโโโโโโโโโโโโ โโโ
โโโโโโโ โโโโโโโโโโโ โโโ โโโ
_Pleasure is a human right. Technology is freedom. Together, they are power._
**[sexy.pivoine.art](https://sexy.pivoine.art)** | ยฉ 2025 Palina & Valknar