Skip to content

Skeptic-systems/Website

Portfolio Website

Personal website showcasing projects, self-hosted services, and an AI-assisted visitor terminal.
Delivered as a TypeScript monorepo that pairs a Next.js 16 frontend with a Hono API backend.


Portfolio website hero preview

Table of Contents

Overview

The website blends storytelling with real-time integrations. Visitors can explore professional highlights, current activity, curated tooling, and an interactive terminal that moderates and publishes community messages. All user-facing copy supports German and English through next-intl.

Highlights

  • Interactive terminal: Submit moderated messages that flow into a multilingual message feed with rate limiting and session persistence.
  • AI moderation pipeline: Orchestrated with LangChain and OpenAI, using Toon Format prompts to minimise token usage.
  • Live data integrations: Background jobs pull from GitHub, Spotify, Jellyfin, and other services for the activity and self-hosted sections.
  • Two-language experience: Server and client components read from apps/www/src/locals, offering a consistent bilingual UI.
  • Dynamic accent system: Visitors can switch the accent palette, driving a site-wide glow theme showcased in the tools section.
  • Self-hosted showcase: Dedicated section for infrastructure projects, powered by the same API that operates the terminal.

Architecture

  • Monorepo managed by Turborepo with shared TypeScript config and Biome formatting.
  • Web app (apps/www): Next.js 16, Tailwind CSS, motion animations, server actions for data fetching, and localized content.
  • API (apps/api): Hono server running on Bun with Drizzle ORM, PostgreSQL for persistence, Redis for terminal session state, and LangChain-driven OpenAI moderation.
  • Infrastructure: compose.yml provisions PostgreSQL, Redis, the API, and the web frontend as separate services.
  • Shared tooling: pnpm workspaces, Turbo pipelines, and a centralized environment file simplify local and production setup.

Terminal Experience

The terminal is a core feature that mixes UX polish with backend automation:

  • Each visitor receives a signed cookie-backed session with configurable quotas.
  • Messages pass through an OpenAI moderation step before persisting to PostgreSQL.
  • Redis tracks rate limits, and the API returns translated content for the live feed.
  • LangChain chains prompts and system context while Toon Format compresses payloads to keep OpenAI token consumption predictable.
  • The plan below summarizes the moderation and publishing flow implemented in apps/api/src/services/terminal-*:

Terminal moderation and publication flow

Screenshots

Show gallery

Every screenshot from docs/assets is included below to illustrate the major flows.

Hero section with accent glow Hero Preview Accent selector and glow states Accent Color Controls Activity section with charts and cards Activity Feed Projects grid with hover states Projects Overview Self-hosted infrastructure cards Self-Hosted Services Language toggle for German and English Language Switcher Terminal input with system prompts Terminal Message Entry Message approved notification Terminal Approval State Message queued for moderation Terminal Awaiting Review Terminal rate limiting feedback Terminal Rate Limit Rejected message feedback Terminal Rejection Terminal IBAN masking preview Terminal IBAN Preview Rejected IBAN entry message Terminal IBAN Rejection Feed language toggle across locales Terminal Language Feed

Getting Started

Prerequisites

  • Node.js >= 20
  • pnpm >= 10 (declared in package.json)
  • Docker (optional, required for running PostgreSQL and Redis locally via Compose)

Installation

pnpm install

Local Development

  • Run both apps concurrently:
    pnpm dev
  • Start the frontend only:
    pnpm www:dev
  • Start the API only:
    pnpm api:dev

Additional scripts for linting, formatting, and database tasks live in the root package.json.

Environment Variables

Copy the template and fill in your secrets before running any service:

# macOS / Linux
cp env.example .env

# Windows PowerShell
Copy-Item env.example .env

Key variables for production are documented in env.example. The snippet below shows the syntax expected by the Docker services:

# Core URLs
NEXT_PUBLIC_API_URL=https://example.com/api
NEXT_INTERNAL_API_URL=http://api:3001

# Database
DATABASE_URL=postgresql://turborepo:password@localhost:5436/turborepo
DATABASE_URL_INTERNAL=postgresql://turborepo:password@postgres:5432/turborepo

# Redis
REDIS_HOST=localhost
REDIS_HOST_INTERNAL=redis
REDIS_PASSWORD=redis_password

# Integrations
SPOTIFY_CLIENT_ID=
SPOTIFY_CLIENT_SECRET=
DISCORD_USER_ID=
GITHUB_TOKEN=
PTERODACTYL_API_URL=
PTERODACTYL_API_KEY=
JELLYFIN_BASE_URL=
JELLYFIN_API_KEY=

# Terminal
TERMINAL_SESSION_COOKIE_NAME=user_id
TERMINAL_SESSION_TTL_SECONDS=86400
TERMINAL_SESSION_TEXT_LIMIT=3
TERMINAL_SESSION_COOKIE_DOMAIN=
TERMINAL_SESSION_COOKIE_SAME_SITE=None
OPENAI_API_KEY=
TERMINAL_OPENAI_MODEL=gpt-4.1-mini

Production Deployment

The repository ships with a Docker Compose workflow tailored for production:

  1. Fill .env with production-ready secrets and correct public URLs.
  2. Build and start the stack:
    docker compose up -d --build
  3. Services exposed by compose.yml:
    • postgres on port 5436 (maps to 5432 inside the container)
    • redis on port 6380
    • api on port 3001
    • www on port 3000
  4. Configure your reverse proxy or platform with:
    • NEXT_PUBLIC_API_URL pointing to the public API host (e.g. https://api.example.com)
    • NEXT_INTERNAL_API_URL referencing the internal Docker network URL (http://api:3001)

For upgrades, pull the latest code, rebuild the images, and rerun docker compose up -d --build.

Project Structure

apps/
  api/        # Hono API with Drizzle ORM and Redis-powered services
  www/        # Next.js frontend with motion-enhanced sections and i18n
docs/
  assets/     # Marketing and product screenshots
  plan/       # Terminal moderation diagram
env.example   # Environment variable template
compose.yml   # Production-ready Docker Compose stack

Tech Stack

Community & Policies

Maintainer

Built and maintained by Skeptic. Reach out through the repository issue tracker for questions or feedback.

(back to top)

About

Portfolio Website in Nexjs including hono api for serving data to the website

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors