projects/Cordova, Cebu Tourism CMS
A tourism and business directory for Cordova, Cebu: attractions, listings and blog content in one place, with a live "Popular Now" ranking and an AI connection for easy updates.

The problem. Visitors and investors looking at Cordova, Cebu had no single, current place to find attractions, hotels and local businesses, and keeping any such site up to date takes time local owners rarely have.
What I built. cordova.humfurie.org, a municipal-style portal and content system with an animated 3D hero, business listings, blog posts and a "Popular Now" ranking that is calculated from real page views. Search and social previews are generated automatically for every listing and article. An embedded MCP server lets an AI assistant add or update listings, blogs, media and hero slides, secured with token-based access.
The result. A live, fast directory that can be kept current with a sentence to an assistant instead of a manual editing session, and that always shows something useful in its trending section, even in quiet weeks.
Key architectural decisions, concrete code implementations, and performance wins behind this project.
Exposing internal CMS operations (business listings, blog posts, media uploads, trending analytics, and hero settings) directly to external AI agents and LLM tooling without building redundant REST endpoints or compromising Next.js App Router security.
Implemented an embedded Streamable HTTP MCP server inside the Next.js Route Handler using @modelcontextprotocol/sdk, securing all incoming AI agent operations with stateless JWT verification via jose and modular domain toolkits.
Calculating real-time 'Popular Now' content rankings from raw PageView timeseries telemetry without bottlenecking the database or serving stale/empty results during low-traffic windows.
Built an aggregation engine in lib/trending.ts that groups page views by customizable time windows, falls back smoothly across cascading intervals (1h → 1d → 1w → all-time), and caches computed rankings via Next.js unstable_cache with interval-specific TTLs.
Maintaining rich search previews and Schema.org structured data (TouristDestination, LocalBusiness, Article, BreadcrumbList) dynamically across multi-tenant routes with varying fallbacks and strict search engine compliance.
Created a centralized builder utility in lib/seo.ts that produces typed OpenGraph, Twitter cards, and Schema.org graphs for business listings, municipal attractions, and editorial content.
// community_discussion
Have thoughts, questions, or ideas regarding this system's architecture? Leave a comment below with your GitHub account.