Project spotlight

The Nineties Times (90sTimes)

A retro, 90s-themed content platform that feels like opening a time capsule: editorials, quizzes, a pop-culture vault, arcade mini-games, a cocktail lounge, weather, and crypto pages—wrapped in a magazine experience people want to explore.

A 90s “time capsule” magazine

A nostalgic browsing experience built around editorials, themed categories, and shareable article pages.

Community-first engagement

Reactions, threaded comments, reporting, and notifications designed to keep readers coming back.

Interactive “Vault” + quizzes

Shows/films/music/games entries with trivia and quiz runners that feel like a playable 90s archive.

Highlights

Discover content fast

  • Browse categories like Entertainment, Technology, Sports, and Info.
  • Search with simple and advanced (paged) filters.
  • Find what’s hot with a Trending feed powered by views, reactions, and comments.
  • Keep reading with “Related articles” recommendations.

Highlights

Play and explore the 90s

  • Vault entries for shows/films/music/games with trivia cards.
  • Show pages that bring metadata, trivia timelines, and quizzes together.
  • Multiple quiz types (trivia, who-said-it, finish-the-line) with timing, difficulty, and scoring.

Highlights

Extras that boost retention

  • Arcade mini-games built for quick, fun sessions.
  • Weather pages with current conditions, forecast, and alerts.
  • Crypto pages with market data and charts.
  • A cocktail lounge with an age gate and recipe discovery.

Fresh content

Always something new to open.

Behind the scenes, 90sTimes has an admin back office and an AI-assisted publishing pipeline that helps keep the 90s vibe alive—without turning the site into modern “news” spam.

AI writer

Admins can request new 90s-focused articles and Q&A content on demand.

Scheduled series

Recurring drops like “On This Day in the 90s” and “Blast From the Past” keep the archive feeling alive.

AI quizzes

Generate quizzes by topic and type, then publish instantly or save as drafts.

Show technical notes (optional)

Stack

  • Next.js 15 (React 19 + TypeScript) frontend (App Router)
  • ASP.NET Core Web API (.NET 8) backend
  • PostgreSQL database
  • Docker + Docker Compose deployment

Architecture

Browser
  |
  |  HTTPS
  v
Next.js Frontend (WT4Q)
  - App Router pages (SSR/SEO)
  - Client components (comments, reactions, admin UI)
  - Route handlers (crypto/weather proxies, IndexNow key)
  |
  |  HTTPS (cookies, CORS)
  v
ASP.NET Core API (Northeast)
  - Controllers (REST)
  - Services (business logic, AI, scheduling)
  - Repositories (EF Core access patterns)
  - Background services (AI queue worker, scheduled series)
  |
  v
PostgreSQL

AI content system (details)

  • Admin-triggered AI writer runs as background jobs (in-memory bounded channel + hosted worker) to avoid gateway timeouts.
  • Resilience controls include a global rate limiter and cooldown/backoff behavior on 429 responses.
  • Prompts require strict JSON output for safer parsing and validation.
  • Scheduled series: “Jokes” (hourly), “On This Day in the 90s” (daily), “Blast From the Past” (daily).
  • “On This Day” can pull 1990s-only events from Wikipedia’s REST feed and inject allowed facts.
  • AI quiz generator uses a strict JSON schema and supports drafts or immediate publishing.

External APIs & services

Backend (.NET)

  • Google Gemini REST (content + quizzes)
  • Wikipedia REST (“On this day”, topic summaries)
  • Google News RSS (optional ingestion pipeline)
  • ipinfo.io (IP → location, cached 24h)
  • Open-Meteo (current weather, UV, AQI)
  • Norwegian Met Institute (forecast + weather alerts)
  • IndexNow (search engine URL notification)
  • Wikimedia Commons API (optional image lookup)
  • SMTP (OTP + contact acknowledgements)
  • Google OAuth (sign-in/sign-up)

Frontend (Next.js + browser)

  • Binance API + WebSocket (tickers/klines, charts)
  • CoinGecko (market ranking + coin metadata)
  • TheCocktailDB (cocktail thumbnails)
  • OpenStreetMap embed (lightweight map view)
  • Google Analytics + AdSense (cookie-consent aware)
  • Social share endpoints (FB/X/LinkedIn/Reddit)

Data model (key entities)

  • User accounts: User, Role, OTP
  • Sessions/security: IdToken, RefreshToken, LoginHistory (rotating refresh tokens, hashed, revocable)
  • Content: Article, ArticleImage, Category, ArticleType
  • Engagement: Comment (threaded), LikeEntity (reactions), CommentReport, Notification
  • Analytics: Visitors, PageVisit (supports the Trending ranking)
  • Vault: Show, ShowTrivia, Quiz, QuizQuestion
  • Bar: Cocktail, Ingridient, IngridientQuantity

Security, privacy, and SEO

  • JWT access tokens delivered via HttpOnly cookies.
  • Refresh tokens stored in HttpOnly cookies and persisted as hashes, rotated on refresh, with revocation support.
  • Role-based access policies (AdminOnly, SuperAdminOnly).
  • Cookie consent UX: analytics and ads load based on saved preferences.
  • Server-rendered pages (SEO) + sitemaps + IndexNow notifications.
  • In-memory caching for IP geolocation, weather responses, and transient AI JSON outputs (smooth retries, fewer 429 storms).

Deployment

  • Docker Compose: Postgres + .NET API + Next.js frontend.
  • Environment-driven configuration (JWT keys, DB connection string, OAuth, SMTP, AI key/model, IndexNow, etc.).
  • Portfolio safety: never commit secrets—use environment variables or a secret store.

Portfolio checklist

Screenshots to add

  • Home page (“Dial-Up Desktop” cover)
  • Category page (“Time Capsule” + Blast From the Past)
  • Article detail page (reactions + comments)
  • 90s Exclusive vault (shows grid + quizzes)
  • Quiz runner gameplay screen
  • Admin dashboard (AI writer + publish form)
  • Show admin (image + trivia management)

Roadmap

What I’d improve next

  • Richer admin moderation tools (bulk review, shadow-bans, audit logs)
  • Durable background job storage (Redis/DB) for horizontal scaling
  • Deeper analytics dashboards (performance and engagement funnels)
  • Server-side image processing (resize/WebP) for uploads and thumbnails