An AI-powered system that automatically finds, scores, and displays horror stories from across the web. Built with ASP.NET Core, Angular, and SQL Server
HTML
0
36 commits
updated Feb 6, 2026
DarkGravity is a sophisticated, end-to-end horror story ecosystem. It crawls the dark corners of the web (Reddit, YouTube), uses a multi-provider AI engine to analyze the "scary score" and hidden patterns of stories, and presents them through a premium, immersive "Dark Mode" web interface.
The repository is organized into a modular, decoupled architecture following SOLID principles and Clean Architecture patterns:
src/Crawler: A .NET Console application that acts as the "Ingestion Engine". It fetches stories from multiple subreddits (r/nosleep, r/shortscarystories) and YouTube transcripts. It saves raw data to the database, leaving analysis for the next stage.src/Analyzer: A dedicated AI processing project. It scans the database for pending stories, runs them through the multi-provider AI failover engine, and updates the "Scary Scores" and analysis.src/Api: An ASP.NET Core Web API that serves the analyzed stories to the frontend via RESTful endpoints.src/Shared: A Class Library containing shared Domain Models (Story) and the Entity Framework Core AppDbContext. This ensures high cohesion and low coupling across the system.src/Web: A high-end Angular 18+ application featuring glassmorphism, fluid animations, and a premium "void" aesthetic.infra/: Docker configuration for local infrastructure (SQL Server).StoryAnalyzer.cs)Spin up the SQL Server database:
docker compose -f infra/docker-compose.yml up -d
Ensure you have the required AI API keys and database credentials set up using .NET User Secrets. This keeps sensitive data out of the repository. See Docs: Secrets Management for detailed instructions.
# Set AI Keys (Move to Analyzer project)
dotnet user-secrets set "GEMINI_API_KEY" "your_key" --project src/Analyzer
# Set Database Password (Namespaced)
dotnet user-secrets set "DARKGRAVITY_DB_PASSWORD" 'your_strong_password_here' --project src/Api
dotnet user-secrets set "DARKGRAVITY_DB_PASSWORD" 'your_strong_password_here' --project src/Analyzer
# View all configured secrets
dotnet user-secrets list --project src/Analyzer
dotnet user-secrets list --project src/Api
dotnet run --project src/Crawler
dotnet run --project src/Analyzer
dotnet run --project src/Api
cd src/Web && npm install && npm start
To generate merged HTML reports for the backend, install the ReportGenerator tool:
dotnet tool install -g dotnet-reportgenerator-globaltool
Run unit and integration tests and collect coverage:
# Run tests and collect data
dotnet test --collect:"XPlat Code Coverage"
# Generate human-readable HTML report
reportgenerator -reports:"**/coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:Html
# View report (MacOS)
open coveragereport/index.html
Run component/service tests and generate coverage:
cd src/Web
# Run tests once with coverage
npm test -- --coverage --watch=false
# View report (MacOS)
open coverage/index.html
Generated by Antigravity.
HTML
76.2%
C#
11.3%
CSS
10.1%
TypeScript
2.0%
An AI-powered system that automatically finds, scores, and displays horror stories from across the web. Built with ASP.NET Core, Angular, and SQL Server
HTML
0
36 commits
updated Feb 6, 2026
DarkGravity is a sophisticated, end-to-end horror story ecosystem. It crawls the dark corners of the web (Reddit, YouTube), uses a multi-provider AI engine to analyze the "scary score" and hidden patterns of stories, and presents them through a premium, immersive "Dark Mode" web interface.
The repository is organized into a modular, decoupled architecture following SOLID principles and Clean Architecture patterns:
src/Crawler: A .NET Console application that acts as the "Ingestion Engine". It fetches stories from multiple subreddits (r/nosleep, r/shortscarystories) and YouTube transcripts. It saves raw data to the database, leaving analysis for the next stage.src/Analyzer: A dedicated AI processing project. It scans the database for pending stories, runs them through the multi-provider AI failover engine, and updates the "Scary Scores" and analysis.src/Api: An ASP.NET Core Web API that serves the analyzed stories to the frontend via RESTful endpoints.src/Shared: A Class Library containing shared Domain Models (Story) and the Entity Framework Core AppDbContext. This ensures high cohesion and low coupling across the system.src/Web: A high-end Angular 18+ application featuring glassmorphism, fluid animations, and a premium "void" aesthetic.infra/: Docker configuration for local infrastructure (SQL Server).StoryAnalyzer.cs)Spin up the SQL Server database:
docker compose -f infra/docker-compose.yml up -d
Ensure you have the required AI API keys and database credentials set up using .NET User Secrets. This keeps sensitive data out of the repository. See Docs: Secrets Management for detailed instructions.
# Set AI Keys (Move to Analyzer project)
dotnet user-secrets set "GEMINI_API_KEY" "your_key" --project src/Analyzer
# Set Database Password (Namespaced)
dotnet user-secrets set "DARKGRAVITY_DB_PASSWORD" 'your_strong_password_here' --project src/Api
dotnet user-secrets set "DARKGRAVITY_DB_PASSWORD" 'your_strong_password_here' --project src/Analyzer
# View all configured secrets
dotnet user-secrets list --project src/Analyzer
dotnet user-secrets list --project src/Api
dotnet run --project src/Crawler
dotnet run --project src/Analyzer
dotnet run --project src/Api
cd src/Web && npm install && npm start
To generate merged HTML reports for the backend, install the ReportGenerator tool:
dotnet tool install -g dotnet-reportgenerator-globaltool
Run unit and integration tests and collect coverage:
# Run tests and collect data
dotnet test --collect:"XPlat Code Coverage"
# Generate human-readable HTML report
reportgenerator -reports:"**/coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:Html
# View report (MacOS)
open coveragereport/index.html
Run component/service tests and generate coverage:
cd src/Web
# Run tests once with coverage
npm test -- --coverage --watch=false
# View report (MacOS)
open coverage/index.html
Generated by Antigravity.
HTML
76.2%
C#
11.3%
CSS
10.1%
TypeScript
2.0%