|
1 | 1 | # Nexus Engine |
2 | 2 |
|
| 3 | + |
| 4 | + |
3 | 5 | <div align="center"> |
4 | 6 | <img src="assets/images/logo.jpg" alt="Nexus Engine" |
5 | 7 | alt="Nexus Engine" |
@@ -74,8 +76,8 @@ Nexus Engine is not a commercial product. It is a technical portfolio project th |
74 | 76 | ## Tech Stack |
75 | 77 |
|
76 | 78 | ### Backend |
77 | | -- ASP.NET Core 8 Web API |
78 | | -- Entity Framework Core 8 + Npgsql |
| 79 | +- ASP.NET Core 9 Web API |
| 80 | +- Entity Framework Core 9 + Npgsql |
79 | 81 | - MediatR 12 (CQRS) |
80 | 82 | - SignalR (real-time WebSocket) |
81 | 83 | - Swashbuckle (Swagger UI) |
@@ -110,8 +112,17 @@ cd Nexus-Engine |
110 | 112 | docker compose --profile csharp up --build |
111 | 113 | ``` |
112 | 114 |
|
| 115 | +### Workflow |
| 116 | + |
| 117 | +```bash |
| 118 | +git checkout -b fix/name |
| 119 | +git add . |
| 120 | +git commit -m "fix: " |
| 121 | +git push origin fix/nameix |
113 | 122 | ### Available endpoints |
| 123 | +``` |
114 | 124 |
|
| 125 | +### HTTP Requests |
115 | 126 | ``` |
116 | 127 | POST /api/accounts Create a new account |
117 | 128 | GET /api/accounts/{id} Get current account state (from projection) |
@@ -150,6 +161,18 @@ restart with an empty state. |
150 | 161 |
|
151 | 162 | --- |
152 | 163 |
|
| 164 | +## Live Demo |
| 165 | + |
| 166 | +| Service | URL | |
| 167 | +|---------|-----| |
| 168 | +| Frontend | https://nexus-engine-olive.vercel.app | |
| 169 | +| Backend API | https://nexus-engine-production-60c8.up.railway.app | |
| 170 | +| Swagger UI | https://nexus-engine-production-60c8.up.railway.app/swagger | |
| 171 | +| Health Live | https://nexus-engine-production-60c8.up.railway.app/health/live | |
| 172 | +| Health Ready | https://nexus-engine-production-60c8.up.railway.app/health/ready | |
| 173 | + |
| 174 | +--- |
| 175 | + |
153 | 176 | ## Architectural Decisions |
154 | 177 |
|
155 | 178 | ### ADR-001: Event Sourcing as persistence strategy |
@@ -212,14 +235,15 @@ Handlers depend on `INexusUnitOfWork` interface, never on `NexusDbContext` direc |
212 | 235 | - 20/20 unit tests passing (xUnit + Moq) |
213 | 236 | - Selenium E2E test: full buy/sell match flow verified |
214 | 237 |
|
215 | | -### Phase 5 — Observability and Deploy |
216 | | -- Structured logging (Serilog) |
217 | | -- Health checks |
218 | | -- MediatR Pipeline Behavior for global exception handling |
219 | | -- Architecture diagrams and ADR documentation |
220 | | -- Deploy to Railway (PostgreSQL + backend + frontend) |
221 | | -- Public URL for portfolio showcase |
222 | | -- Metrics (Prometheus + Grafana, optional) |
| 238 | +### Phase 5 — Observability and Deploy ✅ |
| 239 | +- Structured logging (Serilog) with Console + File sinks |
| 240 | +- Health checks (/health/live and /health/ready) |
| 241 | +- MediatR Pipeline Behavior (LoggingBehavior) |
| 242 | +- Deploy to Railway (PostgreSQL + ASP.NET Core 9 backend) |
| 243 | +- Deploy to Vercel (React/Vite frontend) |
| 244 | +- Public URLs for portfolio showcase |
| 245 | +- GitHub Actions CI (build + 20 tests on every PR) |
| 246 | +- Branch protection on main (PR required, CI must pass) |
223 | 247 |
|
224 | 248 | --- |
225 | 249 |
|
|
0 commit comments