{"id":34633324,"url":"https://github.com/faserf/solumati","last_synced_at":"2026-06-01T08:01:13.629Z","repository":{"id":327917640,"uuid":"1111371967","full_name":"FaserF/Solumati","owner":"FaserF","description":"Solumati (derived from \"Soulmate\") is an Open Source dating platform designed to counter the superficiality of modern dating. It focuses on personality, deep connection, and data sovereignty.","archived":false,"fork":false,"pushed_at":"2026-05-25T13:43:10.000Z","size":12868,"stargazers_count":1,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T15:29:10.725Z","etag":null,"topics":["dating","open-source","solumati"],"latest_commit_sha":null,"homepage":"https://solumati.fabiseitz.de","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FaserF.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-06T20:02:51.000Z","updated_at":"2026-05-25T13:42:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/FaserF/Solumati","commit_stats":null,"previous_names":["faserf/solumati"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/FaserF/Solumati","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2FSolumati","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2FSolumati/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2FSolumati/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2FSolumati/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FaserF","download_url":"https://codeload.github.com/FaserF/Solumati/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2FSolumati/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33765379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dating","open-source","solumati"],"created_at":"2025-12-24T16:55:14.272Z","updated_at":"2026-06-01T08:01:13.623Z","avatar_url":"https://github.com/FaserF.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Solumati - Find Your Match ❤️\n\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/FaserF/Solumati?color=pink\u0026label=Latest%20Release)](https://github.com/FaserF/Solumati/releases/latest)\n[![GitHub License](https://img.shields.io/github/license/FaserF/Solumati?color=blue)](LICENSE.md)\n[![Docker Build](https://img.shields.io/github/actions/workflow/status/FaserF/Solumati/docker-publish.yml?label=Docker%20Build)](https://github.com/FaserF/Solumati/actions/workflows/docker-publish.yml)\n[![Release Pipeline](https://img.shields.io/github/actions/workflow/status/FaserF/Solumati/release.yml?label=Release%20Pipeline)](https://github.com/FaserF/Solumati/actions/workflows/release.yml)\n\n**Solumati** is a modern, open-source dating platform designed to bring people together. Whether you're looking for true love, a casual fling, or just new friends, Solumati helps you connect with people nearby in a transparent and secure environment.\n\n\u003cimg src=\"https://github.com/FaserF/Solumati/raw/main/frontend/public/logo/Solumati.png\" alt=\"Solumati Preview\" width=\"200\" /\u003e\n\n\u003e [!WARNING]\n\u003e **Active Development / Beta**\n\u003e\n\u003e This project is currently in **heavy development** and is considered **BETA/NIGHTLY** software.\n\u003e While many features are functional, it may contain bugs, incomplete features, or breaking changes.\n\u003e **It is NOT recommended for production use until a stable release is available.**\n\n---\n\n## ✨ Features\n\u003e 📖 **[View Detailed Feature Documentation (v2025.12.2-b6)](docs/FEATURES.md)**\n\n*   🤖 **Unique Matching Algorithm:** Connects users based on deep compatibility calculations using weighted questions.\n*   💬 **Encrypted Chat:** End-to-end encrypted messaging with support for transient (guest) and persistent conversations.\n*   🎫 **Support Integration:** Direct chat with support staff, including **email forwarding** for offline notifications.\n*   🛡️ **Comprehensive Admin Panel:** Modern, responsive interface (Dark Mode supported!) for user management, reports, and system configuration.\n*   📲 **Native App Support:** Optimized for Android (TWA) with PWA capabilities and other platforms.\n*   **🛡️ Security First:** Two-Factor Authentication (2FA) and Passkey support.\n*   **🎨 Modern UI:** Sleek, responsive design with Dark Mode support.\n*   **👀 Guest Access:** Try out limited features without creating an account.\n\n---\n\n## 📱 Native Apps\n\nSolumati is available as a native application for Android, iOS, and Windows!\nYou can download the latest releases from our **[Releases Page](https://github.com/FaserF/Solumati/releases/latest)**.\n\n### Android (APK)\nThe Android app is built using Bubblewrap (TWA) and provides a full-screen immersive experience.\n**Installation:**\n1. Download the `solumati-release.apk` file.\n2. Open the file on your smartphone.\n3. If prompted, allow installation from \"Unknown Sources\" in your settings.\n4. Follow the installation prompts.\n\n### iOS (IPA)\nThe iOS app allows you to run Solumati as a native app on your iPhone or iPad.\n**Installation (via AltStore):**\n1. Download the `solumati-release.ipa` file.\n2. Ensure you have **[AltStore](https://altstore.io/)** (or SideStore/Sideloadly) installed on your device.\n3. Open AltStore on your device.\n4. Tap the \"+\" button in the \"My Apps\" tab.\n5. Select the downloaded `.ipa` file.\n6. AltStore will sign and install the app for you (requires refreshing every 7 days).\n\n### Windows (UWP)\nThe Windows app provides a native desktop experience.\n**Installation:**\n1. Download the `solumati-release.msixbundle` file.\n2. **Important:** Since the app is self-signed, you may need to enable **Developer Mode** in Windows Settings \u003e Update \u0026 Security \u003e For developers.\n3. Double-click the `.msixbundle` file.\n4. Click \"Install\".\n\n---\n\n## 🛠️ For Developers\n\nWelcome to the technical side of Solumati! This project is a full-stack web application built with modern technologies.\n\n### Technology Stack\n*   **Frontend:** React (Vite), TailwindCSS, Lucide Icons\n*   **Backend:** Python (FastAPI), SQLAlchemy (SQLite/PostgreSQL)\n*   **Apps:** Android (TWA), iOS (WebView), Windows (UWP)\n*   **Containerization:** Docker \u0026 Docker Compose\n\n### Getting Started\n\n#### Option A: Running with Docker (Recommended)\nThe easiest way to run the entire stack is using Docker Compose.\n\n```bash\ndocker-compose up --build -d\n```\n\nThis will start:\n*   **Frontend:** http://localhost:3000\n*   **Backend:** http://localhost:7777\n\n#### Option B: Local Development (Manual)\n\nIf you prefer to run services individually without Docker:\n\n**1. Backend Setup**\n```bash\ncd backend\npip install -r requirements.txt\nuvicorn app.main:app --reload --port 7777\n```\n\n**2. Frontend Setup**\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n#### Option C: Home Assistant Addon\nSolumati is also available as a Home Assistant Addon!\nCheck out the repository here: **[Solumati Addon](https://github.com/FaserF/hassio-addons/tree/master/solumati)**\n\n---\n\n### ⚙️ Configuration\n\n#### 📊 Project Statistics\n\u003c!-- STATS_START --\u003e\n| Category | Files | Lines of Code |\n| :--- | :---: | :---: |\n| **Frontend** | 67 | 10128 |\n| **Backend** | 62 | 7507 |\n| **Config \u0026 Docs** | 34 | 3700 |\n| **Total** | **163** | **21335** |\n\u003c!-- STATS_END --\u003e\n\n#### OAuth (Social Login)\nEnable login via GitHub, Google, or Microsoft by configuring the client IDs and secrets in the Admin Console.\n\n➡️ **[Detailed OAuth Setup Guide](docs/OAUTH_SETUP.md)**\n\n*   `GITHUB_CLIENT_ID` \u0026 `GITHUB_CLIENT_SECRET`\n*   `GOOGLE_CLIENT_ID` \u0026 `GOOGLE_CLIENT_SECRET`\n*   `MICROSOFT_CLIENT_ID` \u0026 `MICROSOFT_CLIENT_SECRET`\n\n#### 🤖 CAPTCHA\nProtect your instance from bots and brute-force attacks by enabling CAPTCHA (Cloudflare Turnstile, reCAPTCHA, or hCaptcha).\n\n➡️ **[Detailed Captcha Setup Guide](docs/CAPTCHA_SETUP.md)**\n\n#### Android Release Signing \u0026 Configuration\nTo enable secure and persistent signing for Android releases, you can set the following secrets in your GitHub repository (**Settings** -\u003e **Secrets and variables** -\u003e **Actions**).\n\n| Secret Name | Description | Default (if not set) |\n| :--- | :--- | :--- |\n| `ANDROID_KEYSTORE_BASE64` | Base64 encoded content of your `.jks` or `.keystore` file. | A new keystore is generated |\n| `ANDROID_KEYSTORE_PASSWORD` | Password for the keystore. | `RepoName` + 15 random chars (Cached) |\n| `ANDROID_KEY_ALIAS` | Alias of the signing key. | `android` |\n| `ANDROID_KEY_PASSWORD` | Password for the signing key. | Same as `ANDROID_KEYSTORE_PASSWORD` |\n\n**Note on Defaults:**\nIf you do not provide these secrets, the workflow will automatically generate a secure random password and a new keystore for you. These are **cached** (`android-keystore.jks` and `keystore.pwd`) by GitHub Actions so that future builds use the same signing key, allowing app updates to work. However, if the cache is cleared, you will lose the ability to update existing installations of your app. For production apps, setting the secrets manually is highly recommended.\n\n#### Marketing Page\n*   **Enable Marketing Page:** Set `ENABLE_MARKETING_PAGE=true` to enable the public-facing promotional page and \"More Info\" link.\n\n#### Testing\n*   **Test Mode:** Set `TEST_MODE=true` in backend environment variables to enable debug features.\n\n#### Logging \u0026 Secrets\n*   **Log Level:** You can configure the logging verbosity by setting the `LOG_LEVEL` environment variable (e.g., in `docker-compose.yml`).\n    *   **Allowed Values:** `DEBUG`, `INFO` (Default), `WARNING`, `ERROR`, `CRITICAL`.\n*   **Password Visibility:**\n    *   Critical secrets, such as the **Initial Admin Password** and **Emergency Reset Tokens**, are **always printed** to the standard output (terminal/Docker logs) for visibility, regardless of the configured `LOG_LEVEL`.\n    *   This ensures that you can always retrieve access credentials during initial setup or emergency recovery, even if logging is set to `ERROR`.\n\n### 🧪 Manual CI Test Execution\n\nTo ensure your code meets the quality standards before pushing, you can run the Continuous Integration (CI) checks manually on your local machine.\n\n#### Prerequisites\nEnsure you have the following installed on your PC:\n*   **Python 3.10+**: [Download Python](https://www.python.org/downloads/)\n*   **Node.js 18+ \u0026 npm**: [Download Node.js](https://nodejs.org/)\n*   **Git**: [Download Git](https://git-scm.com/)\n\n#### 1. Backend Tests\nThe backend uses `pytest` for testing.\n\n```bash\n# Navigate to root directory\npip install -r backend/requirements.txt\npython -m pytest backend/tests\n```\n\n#### 2. Frontend Linting\nThe frontend uses `ESLint` (v9) to enforce code quality.\n\n```bash\ncd frontend\nnpm install\nnpm run lint\n```\n\n#### 3. Translation Synchronization\nEnsure that the German (`de.json`) and English (`en.json`) translation files are synchronized.\n\n```bash\n# From root directory\npython backend/tests/check_i18n.py\n```\n\n\n---\n\n### 📄 License\nSolumati is open-source software licensed under the [GNU Affero General Public License v3.0](LICENSE.md).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fsolumati","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaserf%2Fsolumati","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fsolumati/lists"}