|
1 | | -# 🧭 SparkCheck Project Structure Guide |
2 | | - |
3 | | -Welcome to the SparkCheck project! This guide explains how the solution is organized so you can confidently contribute without breaking anything. |
| 1 | +<h1 align="center">SparkCheck</h1> |
| 2 | +<h3 align="center">Swipe-Less Dating App Written in Blazor Server with EF Core</h3> |
4 | 3 |
|
5 | 4 | --- |
6 | 5 |
|
7 | | -## 📁 wwwroot/ |
8 | | - |
9 | | -The **public web root** for static assets. |
10 | | - |
11 | | -- `css/` – Custom styles (`app.css`, etc.) |
12 | | -- `img/` – App images, logos, icons |
| 6 | +<p align="center"> |
| 7 | +<img alt="SparkCheck" src="https://sparkcheck.date/images/logo.png" width="500px"/> |
| 8 | +<br> |
| 9 | +<br> |
| 10 | +<a href="https://sparkcheck.date"> |
| 11 | +<img alt="sparkcheck.date" src="https://img.shields.io/website?url=http%3A%2F%2Fsparkcheck.date%2Fimages%2Flogo.png&up_message=SparkCheck.date&down_message=down"> |
| 12 | +</a> |
| 13 | +<a href="https://hub.docker.com/r/judebeans/sparkcheck"> |
| 14 | +<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/judebeans/sparkcheck"> |
| 15 | +</a> |
| 16 | +<a href="https://github.com/SparkCheckDevHub/SparkCheck/releases"> |
| 17 | +<img alt="Latest Release" src="https://img.shields.io/github/v/release/SparkCheckDevHub/SparkCheck"> |
| 18 | +</a> |
| 19 | +<a href="https://github.com/SparkCheckDevHub/SparkCheck/blob/main/LICENSE"> |
| 20 | +<img alt="AGLPv3 License" src="https://img.shields.io/github/license/SparkCheckDevHub/SparkCheck"> |
| 21 | +</a> |
13 | 22 |
|
14 | 23 | --- |
15 | 24 |
|
16 | | -## 🧩 Shared/ |
| 25 | +SparkCheck is a live matchmaking dating platform, built with Blazor Server and EF Core. Unlike traditional swipe apps, SparkCheck instantly pairs users for live chat sessions, making connections faster, more interactive, and meaningful. |
17 | 26 |
|
18 | | -Reusable UI components **organized by feature**. |
| 27 | +Key Features: |
| 28 | +- <strong>Filtered matchmaking queue</strong> - Find the best match based on age, location, gender, and preferences |
| 29 | +- <strong>Live interactive sessions</strong> - Engage with AI-generated conversation prompts in real-time |
| 30 | +- <strong>Date Designer</strong> - Curated date ideas based on mutual interests and nearby locations |
| 31 | +- <strong>Ease of use and setup</strong> - Only requiring phone number login, interests selection, and profile completion to begin. |
19 | 32 |
|
20 | | -- `Layout/` |
21 | | - - `MainLayout.razor` – App shell (header, sidebar) |
22 | | - - `NavMenu.razor` – Navigation bar |
| 33 | +Tech Stack |
| 34 | +- <strong>Blazor Server</strong> (.NET 8) |
| 35 | +- <strong>Entity Framework Core</strong> for database management. |
| 36 | +- <strong>MudBlazor</strong> for UI components |
| 37 | +- <strong>Python microservices</strong> for matchmaking and phone verification |
| 38 | +- <strong>SQLAlchemy</strong> for python database connectivity |
| 39 | +- <strong>AsteriskPBX</strong> for initiating verification calls to the user |
| 40 | +- <strong>Dockerized</strong> for easy deployment |
| 41 | +- <strong>Nginx</strong> as a reverse proxy |
23 | 42 |
|
24 | | -- Other folders like `Chat/`, `Match/` will hold feature-specific UI parts. |
| 43 | +Original Contributing Members (alphabetical order): |
| 44 | +- <strong>Brandon</strong> (<a href="https://github.com/burtonb0210"><img src="https://github.com/burtonb0210.png" width="24" height="24" style="border-radius:50%; vertical-align:middle;"> burtonb0210</a>) |
| 45 | +- <strong>James</strong> (<a href="https://github.com/judebeans"><img src="https://github.com/judebeans.png" width="24" height="24" style="border-radius:50%; vertical-align:middle;">judebeans</a>) |
| 46 | +- <strong>Seth/Homer</strong> (<a href="https://github.com/sbkb1"><img src="https://github.com/sbkb1.png" width="24" height="24" style="border-radius:50%; vertical-align:middle;">sbkb1</a>) |
| 47 | +- <strong>Seth</strong> (<a href="https://github.com/Seth7051"><img src="https://github.com/Seth7051.png" width="24" height="24" style="border-radius:50%; vertical-align:middle;">Seth7051</a>) |
25 | 48 |
|
26 | | ---- |
27 | 49 |
|
28 | | -## 🧬 Data/ |
| 50 | +<strong>Ready to find a match?</strong> |
| 51 | +<br> |
| 52 | +Check out our live demo at <a href="https://sparkcheck.date">SparkCheck.date</a>. NOTE: We reset the data on the server weekly. |
29 | 53 |
|
30 | | -Database-related logic using **Entity Framework Core**. |
| 54 | +<strong>Want to run your own instance of SparkCheck?</strong> |
| 55 | +<br> |
| 56 | +Visit the <a href="#server-installation">server installation</a> section to learn how deploy your own instance. |
31 | 57 |
|
32 | | -- `AppDbContext.cs` – DB context with DbSets for Users, Matches, etc. |
33 | | -- `DbSeeder.cs` – (Optional) Seeds test data for local dev |
| 58 | +<strong>Want to contribute?</strong> |
| 59 | +<br> |
| 60 | +We welcome code contributions for our project :) Please familiarize yourself with our codebase, read and agree to the <a href="https://github.com/SparkCheckDevHub/SparkCheck/blob/main/CONTRIBUTING.md">contributor code of conduct</a>, and submit a pull request! |
34 | 61 |
|
35 | 62 | --- |
36 | 63 |
|
37 | | -## 💬 Hubs/ |
38 | | - |
39 | | -**SignalR real-time communication** using WebSockets. |
40 | | - |
41 | | -- `ChatHub.cs` – Used for live chat messaging |
| 64 | +## Server Installation |
| 65 | +To install SparkCheck on your own server, you'll need a machine capable of running Docker and Docker-Compose and any additional requirements. |
| 66 | + |
| 67 | +### Dependencies |
| 68 | +(Optional) To install all of the necessary Docker and related dependencies before deployment, run the following script provided in the repository |
| 69 | + |
| 70 | +```sh |
| 71 | +chmod +x ./scripts/install.sh |
| 72 | +sudo bash ./scripts/install.sh |
| 73 | +``` |
| 74 | + |
| 75 | +The necessary dependencies include: |
| 76 | +- Docker |
| 77 | +- Docker Compose |
| 78 | +- Git |
| 79 | +- Certbot |
| 80 | +- Nginx |
| 81 | +- Socat (optional, for testing) |
| 82 | + |
| 83 | +### Cloning the Repository |
| 84 | +Next, make sure you clone the repository onto your machine and enter it as the working directory. |
| 85 | + |
| 86 | +```sh |
| 87 | +git clone https://github.com/SparkCheckDevHub/SparkCheck.git |
| 88 | +cd SparkCheck |
| 89 | +``` |
| 90 | + |
| 91 | +### Environment Variables |
| 92 | +SparkCheck uses a variety of environment variables to properly deploy an instance. The grid below shows each environment variable and its purpose. |
| 93 | + |
| 94 | +Variable | Purpose/Description |
| 95 | +----------------|------- |
| 96 | +SA_PASSWORD | This is the password used by Microsoft SQL Server. Please set a password following the <a href="https://learn.microsoft.com/en-us/sql/relational-databases/security/strong-passwords?view=sql-server-ver17">strong passwords guideline</a>. |
| 97 | +SC_USE_ASTERISK | True\|False depending on if your server will be using phone verification |
| 98 | +SC_SIP_HOST | The hostname of the VOIP point of presence. |
| 99 | +SC_SIP_PORT | The port used by the VOIP point of presence |
| 100 | +SC_SIP_NUMBER | The DID used to make calls. |
| 101 | +SC_SIP_USERNAME | The username for VOIP authentication. |
| 102 | +SC_SIP_PASSWORD | The password for VOIP authentication. |
| 103 | +SC_OPENAI_KEY | An API key provided by OpenAI for generative features in match chats. |
| 104 | + |
| 105 | +To deploy the most basic of configurations on a Linux machine, create a .env file in the repository root, and write our basic configuration to the file. NOTE: Please use a secure database password. |
| 106 | + |
| 107 | +```sh |
| 108 | +touch .env |
| 109 | +nano .env |
| 110 | +# Then write the basic configuration to the file, and run the following command: |
| 111 | +source .env |
| 112 | +``` |
| 113 | + |
| 114 | +Basic Configuration: |
| 115 | +``` |
| 116 | +SA_PASSWORD=pl34s3-ch4ng3-th1s-s3cur31y |
| 117 | +SC_USE_ASTERISK=False |
| 118 | +``` |
| 119 | + |
| 120 | +On Windows, run the following commands in PowerShell and then start a new session for basic configuration: |
| 121 | +```powershell |
| 122 | +setx SA_PASSWORD "pl34s3-ch4ng3-th1s-s3cur31y" |
| 123 | +setx SC_USE_ASTERISK "False" |
| 124 | +``` |
| 125 | + |
| 126 | +### Startup |
| 127 | +Once your environment variables are setup, finish by building the docker container and running it. Your instance will be accessible at `127.0.0.1:5980`. |
| 128 | + |
| 129 | +```sh |
| 130 | +docker-compose build |
| 131 | +docker-compose up -d |
| 132 | +``` |
| 133 | + |
| 134 | +Alternatively, use our quick-start script |
| 135 | + |
| 136 | +```sh |
| 137 | +sudo bash ./start.sh |
| 138 | +``` |
| 139 | + |
| 140 | +To update the containers from the repo, use the following script |
| 141 | +```sh |
| 142 | +sudo bash ./scripts/update.sh |
| 143 | +``` |
| 144 | + |
| 145 | +### Additional Setup |
| 146 | +Optionally, you can configure your instance with Nginx and CertBot. Modify the files in `/nginx` to match your domain configuration. Then, run... |
| 147 | + |
| 148 | +```sh |
| 149 | +sudo bash ./nginx/setup-nginx.sh |
| 150 | +``` |
| 151 | + |
| 152 | +This will guide you through Certbot setup when invoked. |
42 | 153 |
|
43 | 154 | --- |
44 | 155 |
|
45 | | -## 🧠 Models/ |
46 | | - |
47 | | -All **data models (POCOs)** used across the app. |
48 | | - |
49 | | -- `TUser.cs`, `Match.cs`, `ChatMessage.cs`, `Preferences.cs` |
50 | | -- Used in the DB, services, UI, and API calls |
51 | | - |
52 | | ---- |
53 | | - |
54 | | -## 📄 Pages/ |
55 | | - |
56 | | -Blazor **routable screens**—each `.razor` file maps to a route. |
57 | | - |
58 | | -- `Welcome.razor` – First-time screen |
59 | | -- `PhoneLogin.razor` – Login with phone number |
60 | | -- `CreateAccount.razor` – Sign-up form |
61 | | -- `MatchQueue.razor`, `Dashboard.razor` – Main app views |
62 | | - |
63 | | ---- |
64 | | - |
65 | | -## 🛠 Services/ |
66 | | - |
67 | | -C# classes that contain **business logic** or backend communication. |
68 | | - |
69 | | -- `AuthService.cs` – Login, auth logic |
70 | | -- `UserService.cs` – Fetching/updating user data |
71 | | -- `MatchService.cs` – Finding matches |
72 | | -- `ChatService.cs` – Managing chat messages/history |
73 | | - |
74 | | -This keeps logic **separate from the UI**. |
75 | | - |
76 | | ---- |
77 | | - |
78 | | -## 📦 Root-Level Files |
79 | | - |
80 | | -| File | Purpose | |
81 | | -|--------------------------|-----------------------------------------------| |
82 | | -| `.gitignore` | Tells Git what to exclude (e.g., `/bin/`) | |
83 | | -| `App.razor` | Root component entry for Blazor | |
84 | | -| `_Imports.razor` | Global `@using` directives | |
85 | | -| `Program.cs` | App startup and service registration | |
86 | | -| `Routes.razor` | Blazor routing configuration | |
87 | | -| `appsettings.json` | Configs like connection strings, secrets | |
88 | | -| `SparkCheck.sln` | Visual Studio solution file | |
89 | | - |
90 | | ---- |
91 | | - |
92 | | -## ✅ Why This Setup? |
93 | | - |
94 | | -This **feature-first, clean architecture** helps: |
95 | | - |
96 | | -- Keep logic separated and organized |
97 | | -- Avoid spaghetti `.razor` files |
98 | | -- Let multiple devs work without stepping on each other |
99 | | -- Make it easy to add new features or services |
100 | | - |
101 | | ---- |
102 | | - |
103 | | -## 🚀 Getting Started for New Devs |
104 | | - |
105 | | -1. Clone the repo: |
106 | | - `git clone https://github.com/SparkCheckDevHub/SparkCheck.git` |
107 | | - |
108 | | -2. Open `SparkCheck.sln` in Visual Studio |
109 | | - |
110 | | -3. Run the app from `Welcome.razor` |
111 | | - |
112 | | -4. Add new components **in the appropriate feature folder** |
113 | | - (Don’t crowd the root!) |
114 | | - |
115 | | ---- |
| 156 | +### Screenshots |
| 157 | +<img src="https://kodanux.com/sparkcheck/S1.png" width="200px"> |
| 158 | +<img src="https://kodanux.com/sparkcheck/S2.png" width="200px"> |
| 159 | +<img src="https://kodanux.com/sparkcheck/S3.png" width="200px"> |
116 | 160 |
|
117 | | -Welcome aboard! ❤️ |
| 161 | +© 2025 Team Cortanix 💛 |
0 commit comments