{"id":33242395,"url":"https://github.com/sculpttechproject/sparkly-server","last_synced_at":"2026-05-03T11:33:27.332Z","repository":{"id":324294724,"uuid":"1096026832","full_name":"SculptTechProject/sparkly-server","owner":"SculptTechProject","description":"Backend for the Sparkly application. Built with .NET 9, featuring JWT authentication, PostgreSQL, Entity Framework Core, migrations, and a clean service-based architecture. Provides user registration, login, token management, and core domain logic.","archived":false,"fork":false,"pushed_at":"2025-11-14T23:12:59.000Z","size":24,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-15T00:17:58.825Z","etag":null,"topics":["asp-net-core","backend","csharp","dotnet","efcore","jwt","postgresql","webapi"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SculptTechProject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-11-13T20:57:52.000Z","updated_at":"2025-11-14T22:37:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/SculptTechProject/sparkly-server","commit_stats":null,"previous_names":["sculpttechproject/sparkly-server"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/SculptTechProject/sparkly-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SculptTechProject%2Fsparkly-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SculptTechProject%2Fsparkly-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SculptTechProject%2Fsparkly-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SculptTechProject%2Fsparkly-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SculptTechProject","download_url":"https://codeload.github.com/SculptTechProject/sparkly-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SculptTechProject%2Fsparkly-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284767947,"owners_count":27060132,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-16T02:00:05.974Z","response_time":65,"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":["asp-net-core","backend","csharp","dotnet","efcore","jwt","postgresql","webapi"],"created_at":"2025-11-16T20:01:13.992Z","updated_at":"2026-05-03T11:33:27.326Z","avatar_url":"https://github.com/SculptTechProject.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sparkly Server\n\nBackend API for **Sparkly**, a platform for documenting progress, building projects consistently and creating a dynamic portfolio. This repository contains the C# / .NET backend that powers authentication, user accounts, project timelines and the core application logic used by the Sparkly web client.\n\n\u003e Status: early development – the API, domain model and testing setup continue to evolve.\n\n---\n\n## Tech stack\n\n* **.NET 9** (ASP.NET Core Web API)\n* **Entity Framework Core** (code-first migrations)\n* **PostgreSQL** (local or Docker)\n* **Docker + Docker Compose** for containerization\n* **xUnit** integration tests with TestServer\n* **GitHub Actions** (build, tests, optional Docker build)\n* `dotnet` CLI and EF Core CLI\n\n---\n\n## Project structure\n\n```text\nsparkly-server/\n├─ src/                     # API, domain and infrastructure\n├─ Migrations/              # EF Core migrations\n├─ sparkly-server.test/     # Integration tests\n├─ Program.cs               # Application entrypoint\n├─ compose.yaml             # Docker Compose stack\n├─ Dockerfile               # API image\n├─ .github/workflows/       # CI pipelines\n├─ appsettings.json         # Base config\n└─ appsettings.Development.json  # Local overrides\n```\n\n`src` contains controllers, services, domain entities, validators and repository logic. Tests run in isolation with a clean database state.\n\n---\n\n## Getting started\n\n### Requirements\n\n* .NET 9 SDK\n* Docker + Docker Compose\n* Git\n\n### Clone the repo\n\n```bash\ngit clone https://github.com/SculptTechProject/sparkly-server.git\ncd sparkly-server\n```\n\n### Environment variables\n\nConfiguration comes from `appsettings.json` and environment variables. Secrets should never be committed.\n\nExample setup:\n\n```bash\nexport ASPNETCORE_ENVIRONMENT=Development\nexport ConnectionStrings__DefaultConnection=\"Host=localhost;Port=5432;Database=sparkly;Username=sparkly;Password=changeme\"\nexport Jwt__Issuer=\"https://sparkly.local\"\nexport Jwt__Audience=\"sparkly-app\"\nexport Jwt__Secret=\"super-long-secret-key-change-me\"\n```\n\nProviding an example config file (`.env.example` or `appsettings.Development.example.json`) is recommended.\n\n### Apply migrations\n\n```bash\ndotnet restore\ndotnet ef database update\n```\n\nDocker can also run migrations automatically depending on the setup.\n\n### Run locally\n\n**Using dotnet:**\n\n```bash\ndotnet restore\ndotnet run\n```\n\n**Using Docker Compose:**\n\n```bash\ndocker compose up --build\n```\n\nThis launches the API and PostgreSQL.\n\n---\n\n## Tests\n\nIntegration tests run the API with an isolated in-memory server. Each test resets database state.\n\nRun locally:\n\n```bash\ndotnet test\n```\n\nRun through Docker Compose:\n\n```bash\ndocker compose run --rm api dotnet test\n```\n\n---\n\n## GitHub Actions CI\n\nThe repository includes a pipeline triggered on push and pull requests. It performs:\n\n* restore and build\n* test execution\n* optional Docker image build\n\nThis ensures the API stays stable across changes.\n\n---\n\n## API overview\n\nCurrent features:\n\n* user authentication and login\n* user profiles\n* project creation and management\n\nPlanned development:\n\n* project timelines and weekly logs\n* build-in-public feed\n* notifications\n* subscriptions and billing\n* admin and moderation tools\n\nOpenAPI / Swagger documentation will be added.\n\n---\n\n## Docker usage\n\nBuild the image manually:\n\n```bash\ndocker build -t sparkly-server .\n```\n\nRun the container:\n\n```bash\ndocker run \\\n  -e ASPNETCORE_ENVIRONMENT=Development \\\n  -e ConnectionStrings__DefaultConnection=\"Host=db;Port=5432;Database=sparkly;Username=sparkly;Password=changeme\" \\\n  -p 8080:8080 \\\n  sparkly-server\n```\n\n---\n\n## Secrets\n\nSecrets must be provided via environment variables or a secret manager.\n\nFuture keys may include:\n\n* Stripe\n* JWT\n* OAuth providers (GitHub, Google)\n\n---\n\n## Development workflow\n\n1. Open an issue or define a small task.\n2. Implement the change in a feature branch.\n3. Update or add tests.\n4. Run the build and tests locally.\n5. Open a pull request.\n\nThis keeps the repository clean and maintainable.\n\n---\n\n## Short-term roadmap\n\n* refresh tokens\n* public project pages\n* project feed and logs\n* email notifications\n* admin foundations\n* observability (logs, metrics, probes)\n\n---\n\n## Contributing\n\nThe codebase is currently maintained by the SculptTech / Sparkly team. External contributions will be accepted once the core platform stabilises.\n\n---\n\n## License\n\nLicense: **TBD**\n\nUntil finalised, treat the code as source-available only.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsculpttechproject%2Fsparkly-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsculpttechproject%2Fsparkly-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsculpttechproject%2Fsparkly-server/lists"}