A hybrid-stack academic records platform — .NET MAUI mobile + ASP.NET Core 8 API + PostgreSQL, offline-first, containerized, and deployed to Railway. Built as my WGU B.S. capstone across four one-week sprints: 18 issues, 24 passing tests, 11 graded commits, and a full Agile/Scrum paper trail.
Live API: https://studentint-production.up.railway.app · Web demo: coming soon — see roadmap · Predecessor project: studentint-mobile-c971
This project was graded across four formal submissions, from written proposal to deployed production system. Recruiters who want to see end-to-end project ownership (not just code) should start here:
| Stage | Artifact | What it proves |
|---|---|---|
| Proposal (Task 2) | Task2_ORamey.docx |
Business case, SDLC plan, timeline, costs, test methodology — written before any code |
| Delivery (Task 3) | task3_ORamey.docx + video |
Full-stack product, complete documentation, 24-test suite, rubric-complete |
| Deploy & Demo (Task 4) | task4_ORamey.docx + video |
Hosting justification, live Railway deployment, end-to-end walkthrough |
Full submission-trail narrative: docs/SUBMISSIONS.md. Sprint history and 11 graded commits: docs/PROCESS.md.
Full timestamps and chapter breakdown: docs/DEMOS.md.
- Mobile client — .NET MAUI 8 (Android + Windows). Offline-first with SQLite; syncs to the API when online.
- Web API — ASP.NET Core 8 with JWT auth, BCrypt password hashing, EF Core 8, and PostgreSQL 16.
- Domain model — an abstract
AcademicRecordbase class with three concrete subclasses (Term,Course,Assessment) and cascade-delete relationships, so deleting a term cleans up everything beneath it. - Deployment — multi-stage Docker build, containerized API, managed Postgres on Railway. Source and deploy repos are split so README changes don't trigger rebuilds.
Full class diagram source: docs/class_diagram.md.
System-level integration notes: Documentation/MAUI_API_INTEGRATION.md.
| Layer | Technology |
|---|---|
| Mobile App | .NET MAUI 8 (Android + Windows) |
| Offline Storage | SQLite |
| Web API | ASP.NET Core 8 |
| Database | PostgreSQL 16 |
| ORM | Entity Framework Core 8 |
| Auth | JWT Bearer + BCrypt |
| Containerization | Docker (multi-stage) |
| Cloud | Railway.app (API + managed Postgres) |
| Testing | xUnit + EF Core InMemory (24 tests) |
| Process | GitLab — Agile/Scrum, 4 sprints, 18 issues |
dotnet run --project StudentINT.API
# Listens on http://localhost:8080
curl http://localhost:8080/healthdocker compose up -d
# Wait ~45s for Postgres init
curl http://localhost:8080/health
docker compose downdotnet build StudentINT/StudentINT.csproj -f net8.0-windows10.0.19041.0
dotnet run --project StudentINT/StudentINT.csproj -f net8.0-windows10.0.19041.0dotnet test StudentINT.Tests --verbosity normal
# Passed! - Failed: 0, Passed: 24, Skipped: 0, Total: 24| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /health |
— | Health check |
| POST | /api/auth/register |
— | Register user, returns JWT |
| POST | /api/auth/login |
— | Login, returns JWT |
| GET · POST · PUT · DELETE | /api/terms[/{id}] |
JWT | Terms CRUD (cascade on delete) |
| GET · POST · PUT · DELETE | /api/courses[/{id}] |
JWT | Courses CRUD (max 6 per term) |
| GET · POST · PUT · DELETE | /api/assessments[/{id}] |
JWT | Assessments CRUD |
| GET | /api/search?q={query} |
JWT | Cross-entity search |
| GET | /api/reports/{type} |
JWT | terms-summary, courses-by-status, assessments-due |
Controllers live under StudentINT.API/Controllers/; DTOs under StudentINT.API/DTOs/.
On first run the database seeds with:
- Term — Spring 2026 (Mar 1 – Aug 31, In Progress)
- Course — C971 Mobile Application Development (Instructor: Anika Patel)
- Assessments — C971 OA + C971 PA
| Doc | What's in it |
|---|---|
docs/SUBMISSIONS.md |
Proposal → Delivery arc across Task 2 / 3 / 4 with links to each doc and video |
docs/PROCESS.md |
Sprint history, 11 graded commits, rubric → artifact mapping |
docs/DEMOS.md |
Video chapter timestamps and poster-frame generation notes |
docs/class_diagram.md |
Mermaid class diagram source |
Documentation/Task2_ORamey.docx |
Task 2 — Capstone Proposal (business case, SDLC, timeline, testing) |
Documentation/task3_ORamey.docx |
Task 3 — Delivery (full rubric compliance, running system, docs) |
Documentation/task4_ORamey.docx |
Task 4 — Deploy & Demo (hosting justification, live walkthrough) |
Documentation/EntityFramework_README.md |
EF Core context, migrations, cascade rules |
Documentation/MAUI_API_INTEGRATION.md |
How the MAUI client talks to the API |
Documentation/TEST_COVERAGE.md |
24-test breakdown across 4 classes |
Documentation/UNPUT_VALIDATION.md |
Input validation strategy (data annotations, regex, date ranges) |
Documentation/Wireframe/ |
9 wireframes (Terms, Courses, Assessments, Search, Reports, forms) |
| Wiki | Agile/Scrum run-book, branch pattern, label system, rubric mapping |
Phase 1 — shipped. You're reading it: source repo, live API, videos, full docs, MIT-licensed, ready for recruiters to clone and run.
Phase 2 — studentint-web (in progress). Blazor WASM web client deployed to GitHub Pages at orionramey.github.io/studentint-web, hitting the same Railway API. One-click "Try as demo" button logs visitors into a pre-seeded sample account — no registration, no install, full CRUD in the browser.
Phase 3 — MSSWE-AI era. Embedding-based semantic search over the Wiki + course notes, deployed as a companion AI service. This is how the project grows into the AI-Engineer track of my upcoming Master's at WGU.
MIT — see LICENSE.
Built for WGU D424 Software Engineering Capstone. Instructor: Anika Patel. The academic source-of-truth — including sprint issues, merge requests, and burndown charts — lives on a private GitLab instance; the public artifacts (code, docs, wiki) are mirrored here.
