project
NotNull Online
AI-native portfolio platform with a Rust/Axum API structured as Hexagonal Architecture (domain ports, application use cases, infrastructure adapters), hybrid MongoDB Atlas search + RAG chat, Angular 22 admin/CMS, and AWS CDK deploy — with source-cited, non-fabricated answers and EU AI Act transparency.
Domain / Industry: Technology
Solo designer & full-stack developer · Jun 2026 – Present · ~1 mo
Web & desktop
1 / 6
Problem
Traditional online portfolios often suffer from information overload, requiring visitors to navigate static pages and menus to find relevant details. Recruiters and hiring managers need a fast way to assess fit, while the site still must remain SEO-friendly, linkable, and trustworthy when an AI answers questions about real experience.
Approach
NotNull Online reimagines the personal portfolio as an AI-first experience. Visitors ask natural-language questions and receive streaming, source-cited answers grounded in a single knowledge_items content model. The platform refuses to invent projects, employers, or skills when retrieval finds no evidence.
The backend is organized as Hexagonal Architecture (Ports & Adapters):
- Domain — entities, value objects, and outbound port traits (repositories, AI, search, storage, email, auth, PDF, deploy) with no framework or cloud dependencies
- Application — use-case services (chat, RAG, admin, content, embeddings, SEO, contact) that orchestrate ports only
- Infrastructure — MongoDB, OpenAI/Gemini, S3, SES, JWT/Argon2, Typst PDF, GitHub Actions deploy adapters
- API — Axum handlers and DTOs as the driving adapter;
lib.rsis the composition root that wiresAppState
Product strategy stays hybrid: RAG chat for discovery, prerendered public pages for SEO and direct links.
Key Features
- RAG-powered chat — Hybrid retrieval (Atlas Vector Search + Atlas Search), SSE streaming, source citations, follow-up suggestions, grounded validation/fallback so answers stay evidence-based
- Chat-driven navigation — Routes visitors to project, experience, and article pages from conversation
- Single-admin CMS — CRUD across content types, media uploads, AI-assisted authoring drafts, reindex
- SEO without cloaking — Prerendered listings/details, sitemap, Open Graph; Lighthouse SEO ≥ 90
- Production deploy — Admin-triggered public rebuild via GitHub Actions (OIDC → AWS)
- EU AI Act transparency — Homepage disclosure, labeled assistant responses, privacy policy, internal compliance docs
Architecture (high level)
Browser (Angular 22)
↓ REST + SSE
Axum API (driving adapter)
↓
Application services (chat, RAG, admin, content, …)
↓ domain ports
Infrastructure adapters → MongoDB Atlas | OpenAI/Gemini | S3 | SES | GitHub Actions
Dependency rule: domain never depends on adapters; adapters implement ports; the composition root in lib.rs wires concrete implementations into AppState.
Technology Stack
Backend: Rust, Axum, Tokio, Serde, MongoDB Rust driver, JWT, Argon2, tracing
Frontend: Angular 22 (standalone + signals), Angular Material 22, Tailwind CSS 4, pnpm
Data / AI: MongoDB Atlas (documents + Search + Vector Search), OpenAI embeddings, Gemini/OpenAI completions
Ops: AWS (S3, CloudFront, EC2, CDK), GitHub Actions, Playwright, Docker
Outcomes
- Conversational discovery with source-cited, non-fabricated answers from one content store
- Maintainable AI backend: ports make providers and persistence swappable without rewriting use cases
- Full CMS + authoring + reindex loop for keeping the RAG corpus current
- Automated AWS/CDK + GitHub Actions path for content-driven public rebuilds
- Delivered across sequential milestones with Rust integration tests, Angular unit specs, and Playwright E2E smoke coverage





