Duolicious
The world's most popular open-source dating app.
Duolicious is a personality-based dating app for meeting like-minded people. There's no swiping; people connect by starting a conversation. The client and the servers behind it both live in this repo under the AGPL-3.0, so you're welcome to read how it works, run your own copy, or send a patch.
Try it now in your browser at duolicious.app, or grab it on Google Play and the App Store.
How it works
- Matching on answers, not just photos. The question bank has over 2,000
- Psychometric traits. Alongside familiar frameworks like the MBTI,
- No swiping. There's no liking or swiping. People introduce themselves by
- Open source. The app, API, chat, and infrastructure are all in this repo.
- Funding. Duolicious runs on an optional subscription that covers the
What's in this repo
This monorepo contains both halves of Duolicious:
| Directory | What it is |
| --- | --- |
| backend/ | The API, chat, cron and supporting services (Python + Postgres). See its README and DEVELOPER.md. |
| frontend/ | The cross-platform app (Expo / React Native, with a web build). See its README and DEVELOPER.md. |
Run the whole app in one command
Requirements: Docker (with Compose v2.20+).
git clone https://github.com/duolicious/duolicious
cd duolicious
docker compose up
That single command builds and starts the entire backend stack and the frontend web app. Once it's up:
- Frontend (web): http://localhost:8081
- API health: http://localhost:5000/health
- MailHog (test email UI): http://localhost:8025
- Mock S3: http://localhost:9090
- Status page: http://localhost:8080
The local docker compose up stack runs without any secrets — it mocks the
OpenAI-backed features (account verification and club SEO descriptions), so you
don't need a key for development.
A real deployment requires OPENAI_API_KEY: the cron container won't start
without it, so a misconfigured deploy fails fast instead of silently shipping
broken verification. See backend/DEVELOPER.md for the
full list of environment variables.
To seed a test user once the API is healthy:
(cd backend && ./test/util/create-user.sh alice 30 1 true)
Working on just one half
You can develop each side on its own — see the per-directory READMEs and
DEVELOPER.md files linked in the table above. The root docker compose up is
still the easiest way to get everything running at once.
Tests
CI runs the full test suite for both halves on every push and pull request to
main (see .github/workflows/):
- Backend: mypy, unit tests, and functionality suites 1–6.
- Frontend: ESLint, Jest, Playwright, and TypeScript type checks.
Contributing
There are a few ways to help:
- Send a pull request. Pick up an open issue
docker compose up gets you a full local
environment in one step, and developer instructions live in each half's
DEVELOPER.md.
- Read the
CONTRIBUTING.md
- Spread the word. Telling people and sharing Duolicious helps the app grow.
- Subscribe. A subscription helps cover the servers and keep the project
New contributors are welcome. If you're not sure where to start, open an issue and say hello.