Skip to content
This Website

Built to sell itself.

This website is a working product demo. If you like what you see — the AI-powered meetings, the real-time messaging, the content moderation — I can build one for you.

AI-Powered Meetings

Gemini evaluates every meeting request, checks calendar availability via Google Calendar API, and books confirmed slots automatically. No back-and-forth scheduling emails.

Automated Content Moderation

A daily CRON job scans all user-generated content — comments, messages, display names, profile images — through Gemini. Offending users are banned automatically.

Google Workspace Integration

Calendar, Gmail, and Cloud Scheduler work together as backend infrastructure. Meeting confirmations send real emails. Calendar events appear on a real calendar.

Features

Everything under the hood

Ten features, all production-ready. Each one is a selling point for your next website.

Firebase Authentication

Google and Microsoft OAuth sign-in with proactive token refresh, role-based access control, and automatic banned-user detection. Admin routes are protected server-side.

Google & Microsoft Sign-InRole-Based AccessProactive Token Refresh

AI Meeting Requests

Users submit meeting requests that Gemini evaluates for relevance and quality. Approved meetings are automatically booked on Google Calendar with email confirmations sent via Gmail API.

Gemini EvaluationGoogle CalendarEmail Notifications

Real-Time Messaging

Firestore-powered messaging system with real-time updates via onSnapshot listeners. Users can message the site owner directly from their dashboard.

Firestore Real-TimeRead ReceiptsUser Dashboard

Blog with Markdown Editor

Full-featured blog system with a rich Markdown editor, cover image uploads to Cloud Storage, and public/draft publishing states. Admin-only creation.

Markdown EditorCover ImagesDraft System

Content Moderation

Daily CRON job scans all user-generated content through Gemini — display names, profile images, messages, and comments. Violations trigger automatic bans with reason tracking.

Gemini ScanningAuto-BanDaily CRON

User Profiles

Users can upload profile photos or take camera snapshots, with client-side image resizing. Profiles are stored in Firestore with Cloud Storage for images.

Photo UploadCamera CaptureImage Resizing

Admin Dashboard

Protected admin interface for managing users, reviewing meeting requests, and moderating content. Includes user search, ban/unban controls, and role management.

User ManagementBan ControlsRole Assignment

Internationalization

Full English/Norwegian language support with lazy-loaded translations. Content data files are structured so translations overlay the English defaults without code changes.

English / NorwegianLazy LoadingData-Driven

Contact Form

Firestore-backed contact form with server-side validation. Submissions are stored as documents and can be reviewed through the admin interface.

Server ValidationFirestore StorageAdmin Review

Responsive Design

Mobile-first layout with a primary breakpoint at 900px. Every page is tested at 375px, 768px, and 1200px. Animations respect prefers-reduced-motion.

Mobile-First900px BreakpointMotion Preferences

Search Engine Optimization

Dynamic sitemap generated from Firestore blog posts, robots.txt with targeted crawl rules, JSON-LD structured data, Open Graph and Twitter Card metadata on every page, and canonical URLs throughout. Blog posts get per-page metadata with publish dates and cover images.

Dynamic SitemapJSON-LD SchemaOpen Graph & Twitter Cards
Tech Stack

What this site runs on

Framework

Next.js 16React 19TypeScript 5App Router

Styling & Animation

Tailwind CSS 4GSAPMotionLenis Smooth Scroll

Backend & Database

Firebase AuthFirestoreCloud StorageCloud Scheduler

AI & APIs

Google GeminiGoogle Calendar APIGmail API

Development

VitestTesting LibraryESLintPlaywright
Open Source

Standing on the shoulders of giants

This website is built entirely on open-source software. Every library listed here is free to use, and the communities behind them make projects like this possible.

Runtime Dependencies

Development Tools