A photo mood app — express what lingers.
Still doesn't tell you how you feel. It helps you express it.
Still is a quiet, photo-based community for emotional expression.
- Upload a photo.
- AI reads the image and suggests a mood, title, and short description.
- Edit if you want — the user is always the author.
- Share to the community.
- Others can Resonate with your moment.
still/
├── apps/
│ ├── mobile/ # Expo React Native app
│ └── backend/ # Go + ConnectRPC API server
├── proto/
│ └── still/v1/ # Protocol buffer definitions
├── packages/
│ ├── design-system/ # Shared UI tokens and components
│ ├── generated-sdk/ # Generated TypeScript client SDK
│ └── shared-types/ # Shared TypeScript constants and types
├── scripts/ # Development and codegen scripts
├── docs/ # PRD, architecture, and UI design docs
└── Makefile # Common development tasks
| Layer | Tech |
|---|---|
| Mobile | Expo SDK 54 (React Native 0.81) + TypeScript + React Navigation + Zustand |
| Backend | Go + ConnectRPC + pgx/v5 + golang-migrate |
| API | Protocol Buffers + buf |
| Database | PostgreSQL |
| Storage | S3 / S3-compatible (dev: MinIO, prod: AWS S3 / Cloudflare R2) |
| AI | CloudWeGo Eino + multi-provider LLM layer (OpenAI, DeepSeek, Moonshot, Qwen) |
| Auth | Clerk |
| Observability | zerolog + OpenTelemetry + Sentry |
| CI / Deployment | GitHub Actions + Docker + Fly.io / Railway / Render configs |
- Node.js >= 20
- Go >= 1.26
- Docker + Docker Compose (for PostgreSQL and MinIO)
- buf CLI (for protocol buffer generation)
- OpenAI API key
make installmake envThis creates dev env files from .env.example:
apps/backend/.env.developmentapps/mobile/.env.development
Edit apps/backend/.env.development and set your LLM_API_KEY (legacy OPENAI_API_KEY still works when using OpenAI).
make infraStarts PostgreSQL and MinIO (S3-compatible storage for local dev).
make backendThe backend loads apps/backend/.env.development and runs on http://localhost:8080.
make mobileThe mobile app loads apps/mobile/.env.development and connects to the local backend.
make help # Show all available commands
make build # Build all workspaces
make lint # Run linters
make test # Run tests
make proto # Regenerate Go + TypeScript SDK from proto files
make migrate # Run database migrations up
make migrate-down # Rollback one migration
make infra-down # Stop local infrastructure
make clean # Stop infrastructure and remove volumes- Fill
apps/backend/.env.productionwith real credentials:- PostgreSQL
DATABASE_URL LLM_PROVIDERandLLM_API_KEY(see.env.examplefor supported providers)CLERK_SECRET_KEY- S3 credentials (
S3_ENDPOINT,S3_REGION,S3_BUCKET,S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY) - Optional:
SENTRY_DSN,OTEL_EXPORTER_OTLP_ENDPOINT
- PostgreSQL
- Set
apps/mobile/.env.productionEXPO_PUBLIC_API_BASE_URLto your production API domain. - Build and deploy the backend and mobile app as usual.
See docs/ for PRD, architecture decisions, and deployment guides.
We welcome contributions to the Community Edition. Please read CONTRIBUTING.md and CLA.md before opening a PR.
This repository is the open-source Community Edition. For the official hosted service, premium AI features, and enterprise support, see COMMERCIAL.md or visit https://still.app (placeholder).