JT

Projects Board

Shipped sites, Workers & tools — João Tomé

Apr 2026
34
Total projects
16
Deployed live
7
CF Workers
6
CF Pages
5
Backend services
Project Map
A quicker way to read the board
A direct map of the main live sites and reference pages. This keeps the top of the board practical: names first, URLs visible, deeper commentary below.
Personal live
joaotomejoaotome.com
This Week in NETthisweekinnet.com
joaotome.orgjoaotome.org
Casa Magiacasamagia.org
Creative / writing
Technology in the Age of Discoveriesresearch project
Projects Boardemotdash.pages.dev
Read on this page
Audience prioritieswhat to prioritize
Identity summarypersonal presence
Internal toolingCloudflare org context
Closing notewhat this means
Future workfor me / others
Read More
Personal Account — Shipped & Live
🧑
joaotome.com
Public Live ✓
Worker React + Vite KV
Personal portfolio and landing page. "Sr. Data Editor at Cloudflare, Writer, Storyteller." SPA deployed as a CF Worker.
Interactive 3D globe (Three.js / globe.gl) showing live visitor dots
shadcn/ui, dark/light mode via next-themes
Visitors fed live by the visitor-radar Worker
Improvements in sessions
Rebuilt from Lovable scaffold into a fully custom site
Added live globe with real-time visitor tracking
Integrated visitor-radar backend Worker for the globe
🤖
Public Live ✓
Worker Workers AI Vectorize D1
RAG-powered AI assistant answering questions about João Tomé's writing, grounded in 784 pieces across Cloudflare Blog, Destak Archive, TWiN, DN Insider, Dinheiro Vivo, Substack, Medium, and more.
784 indexed pieces — CF blog posts, Destak Archive, TWiN, DN Insider, Dinheiro Vivo, Substack, Medium
Embeds question → searches Vectorize → fetches chunks from D1 → generates answer via Workers AI
Returns source citations with URLs per answer
Word cloud + suggested questions sidebar, dark/light mode
Rate-limited, inspired by ricmac.org/ask
📺
thisweekinnet.com
Public Live ✓
Worker React + Vite
Website for This Week in NET — João's weekly Cloudflare show covering Internet trends, AI, and security. 100+ episodes.
Episode list, search, topic chart, watch quiz, most-popular embed
CFTV RSS proxy — Worker bypasses CORS restriction on cloudflare.tv
Improvements in sessions
Added RFC 8288 Link headers for AI agent discovery on every response
Accept: text/markdown → returns markdown homepage for AI crawlers
Shipped llms.txt, llms-full.txt, agent-card.json, server-card.json, api-catalog
Added CFTV RSS proxy to the Worker (was blocked by CORS before)
seremot.com
Public Live ✓
Pages Hugo
Personal blog and experiments site. Writing, Agents playground, VizLab, About page. Built with Hugo, deployed on Cloudflare Pages. Content is sourced by Ask Emot's RAG pipeline.
Blog posts: "jgc's teachings", "some (no) where to go", "why seremot.com"
Agents playground — experiments with AI agents
VizLab — data visualization experiments
RSS feed at seremot.com/index.xml
📓
joaotome.org
Public Live ✓
Worker Notion
"Who is João Tomé" — a Notion workspace (garden of ideas) served as a real website via the Fruition technique. CF Worker on a custom domain.
Proxies Notion content, rewrites all workspace domain references
Clean URL slugs: / (home) and /about
Injects SEO meta, dark mode toggle, redirect-blocking script, hides Notion toolbar
Improvements in sessions
Fixed Notion-to-custom-domain redirect loop — overrides window.location, fetch, and XHR
Added API response rewriting to prevent client-side leaks to seremot.notion.site
Uses 302 (not 301) redirects so Notion's client-side JS renders correctly
A Casa de Magia e Feitiçaria
Public Live ✓
Pages Worker KV
"A Casa de Magia e Feitiçaria" — now live on casamagia.org as the primary custom domain, with housemagic.pages.dev as the full English version. A large Harry Potter learning-and-play world with 184 covers from 12 countries, games, cards, spells, cloud sync, and educational content for kids, parents, and teachers.
Primary site: casamagia.org. Mirrors: casamagia.pages.dev, harrypottercapas.pages.dev, hp-covers.pages.dev. English full version: housemagic.pages.dev
184 covers from 12 countries, 40 spells with Latin etymology, and 52 collectible Chocolate Frog cards including real scientists
5 mini-games, 14 duel opponents, Daily Challenge with streaks, Sorting Hat, Dobby Room, Owl Post, and Marauder's Map navigation
Google Sign-In, cross-domain cloud sync, public leaderboards, suggestions, and Worker-backed data sync
3-language UI chrome (PT, EN, FR) plus a full English-first version for international sharing
Educational framing for families and schools: science cards, teachers/parents section, robots.txt + sitemap.xml, affiliate links and Ko-fi live
🧠
Focus & Life — Knowledge Library
Local
Vanilla JS
Curated knowledge library synthesizing wisdom from 41 thinkers — 1,200+ articles and 497 quotes spanning technology, science, literature, philosophy, art, and music. With per-thinker deep dives and cross-cutting takeaways.
Deep dives: Paul Graham (225 essays), Sam Altman, Steve Jobs, Naval Ravikant, Charlie Munger, Derek Sivers, Marc Andreessen, Scott Galloway, Patrick Collison, George Orwell, Neil deGrasse Tyson
Takeaways document distilling 8 big shared ideas: focus as elimination, follow curiosity not prestige, compounding, writing is thinking
497 curated quotes with per-thinker JSON data
Paul Graham tweets archive, Bluesky posts collected
📚
Knowledge Dashboard
Local
Vanilla JS Python
Aggregated personal knowledge dashboard — combines quotes, Twitter/X bookmarks, LinkedIn bookmarks, Bluesky posts, and garden-of-ideas links into a single searchable, filterable interface. Built with a Python build script + HTML template.
46K-line single-file HTML — all data embedded, zero external dependencies
Sources: quotes collection, Twitter bookmarks, LinkedIn, Bluesky, garden of ideas
Color-coded by source, searchable, filterable by category
Python build.py + template.html generates the dashboard
Cloudflare Org — Shipped & Live
🎲
Randomness Playground
randomness-playground.pages.dev · playland.workers.dev · randomness.cloudflare.com (target — not yet deployed)
Public Live ✓
Pages Worker D1 R2 Vanilla JS
Interactive educational site explaining how Cloudflare generates cryptographic randomness. 7 entropy sources, 10 output types, educational tabs, and experimental features. ~5,800 lines, zero external JS dependencies. randomness.cloudflare.com is the intended production domain but not yet pointed here.
7 entropy sources: lava lamps (SF), double pendulums (London), wave machines (Lisbon), suspended rainbows (Austin), user camera, Pong, Doom
10 output types: random numbers, dice, coin flip (30 world coins), lottery, EuroMillions, passwords, Magic 8-Ball, vacation, Geek Atlas, Wikipedia
Connects to the League of Entropy's drand beacon for verifiable public randomness
Time capsule: tlock-encrypted messages — currently in demo mode (SIRT review pending, IS_DEMO flag active, not functional for real capsules)
Magic Beanstalk — interactive post-quantum key stretching demo
Entropy quiz (20 questions), 9 educational tabs, receipt printer, 4 color themes, split-flap title animation
🎤
Cloudflare Lisbon Engineering Meetups
Public Live ✓
Pages Vanilla JS
Public meetup hub for the Cloudflare Lisbon engineering community. A lightweight Pages site for upcoming events, past talks, event detail pages, presentation videos, and office/location details. Organized by Cloudflare's Kickstart team in Lisbon under Celso Martinho.
Keeps the next Lisbon engineering meetup and the recent event archive in one place
Google Group signup for event news plus dedicated event pages with registration links, photos, and presentation recordings
Current featured talk: Agent-Ready Websites + AST Parsing with AI (April 14, 2026), with Luma registration and two embedded YouTube talks
Location section with Cloudflare Lisbon office address, Maps link, and office photography
Includes Chaos Reef / Lisbon wave machines context and links the related Cloudflare blog post
Dark preview variant at /agents-inspired plus event pages in both standard and dark styles
Agent-ready metadata shipped: .well-known/site-service.json, api-catalog, agent-skills index, sitemap, and link-header discovery
📰
Cloudflare Blog Revamp
Internal Live ✓
Pages Vanilla JS
Redesign prototype for the Cloudflare Blog landing page — moving from a reverse-chronological feed to a curated, visually hierarchical layout. Full design spec with competitive analysis (GitHub Blog, Anthropic Newsroom, Google Keyword).
V1 (root) — Light theme, 60/40 hero + "Latest" sidebar above the fold, sticky category nav, client-side search
V2 (/v2) — Dark "Workers-style" theme with dotted grid background and flowing network line animations
Category spotlights (Developers, Security, AI & Agents), reduced tag clutter (1 pill per card)
Design spec document (159 lines) + competitive reference materials (GitHub, Anthropic, Google blogs)
Blog search data index with recent posts up to 2026-03-31
📊
Blog Analytics Dashboard
Internal Live ✓
Pages Vanilla JS
Internal GA4 analytics dashboard for the Cloudflare blog. All-time pageviews per post, author stats, tag analysis, CP ratios. Behind Cloudflare Access.
GA4 data embedded as JSON — v1 is the authoritative base, never rebuilt from CSV
Author leaderboard, post explorer, tag breakdown, CP ratio
Incremental CSV overlays keep data current without losing old counts
Improvements in sessions
Fixed critical undercount bug — CSV alone missed older posts by 200x (announcing-1111: 4K CSV vs 840K real)
Established v1 as the authoritative base; all updates are additive overlays
AUTHOR_MAP grown to 2,627+ entries, REAL_TITLE_MAP to 2,648+ entries
📱
Social Media Dashboard
Internal Live ✓
Pages Vanilla JS
Internal Cloudflare social media performance dashboard in two versions, behind Cloudflare Access. Data is embedded (no live API feed currently).
v1 (root) — baseline dashboard, static embedded dataset, no live data
v2 (/v2) — full 9-tab dashboard with This Week in NET perspectives: Overview · Post Types · Timing · Heatmap · Best Posts · Accounts · Trends · TWiN Social · TWiN YouTube
Platforms: Twitter/X, LinkedIn, Bluesky, YouTube, Instagram, Facebook, Mastodon
Ask the Dashboard — question presets per tab, comparison mode (rolling periods, year/quarter/month)
Quick Publish Playbook — best day/hour and strongest format per platform
🏷
Cloudflare HN Board
Internal Live ✓
Pages Vanilla JS
Internal tool tracking Cloudflare blog posts on Hacker News — live HN scores, comment counts, CP ratios, author leaderboards. Behind Cloudflare Access.
Pulls live data from HN Algolia API at runtime
Top posts all-time, trending, by author — sorted by CP ratio
CP ratio identifies posts that spark discussion, not just traffic
📈
Index of Trends — Mockup
Internal Live ✓
Pages Vanilla JS
Functional mockup for a new Radar feature: a lightweight publishing layer for short-form data insights — giving Radar a permanent, searchable home for the outage, country, ASN, protocol, and product updates that currently disappear into X and Bluesky feeds. Deployed on CF Pages. Target Q2 2026.
Three mockup variants in the folder: original concept, Radar-styled version, and deployed Pages version
Browsable, filterable archive of trend entries with time window, country, ASN, protocol, and category filters
Each entry carries title, 1-3 paragraph summary, tags, timestamp, optional chart/image, and optional link to a full report
Two-layer visibility model: curated homepage trends vs full archive index, with planned surfacing on country/ASN/category pages
Designed to feed Radar landing page, Radar Display, and report teasers while reusing the same backoffice pattern as outages
Full PRD, roadmap, and unified Reports + Index of Trends roadmap written for Q2 2026
📋
Radar Reports — Mockups
Prototypes / internal mockups
Internal Built ✓
Vanilla JS Python
Functional prototypes for a new Reports area on Radar. This workstream defines how event and quarterly reports should be produced, authored, and rendered inside Radar itself: Tier 2 embedded reports first, Tier 3 interactive reports later. Full PRDs and roadmaps written, target Q2 2026.
Report tiers defined: Tier 1 external microsite, Tier 2 standard embedded report, Tier 3 full interactive report inside Radar
MDX-preferred authoring with HTML fallback, metadata header, TOC, embedded charts, and reusable components like StatHighlight, CountryCard, ASNCard, and OutageSummaryBlock
Live/test prototypes include Storm Kristin, Super Bowl LX, DDoS Report Q1 2025, Iran shutdown coverage, and Starlink traffic maps
Unified roadmap aligns the Reports and Index of Trends tracks, including AGENTS.md rules, trend-vs-report routing, and pilot content milestones
Examples span simple article-style HTML reports and more interactive map-heavy concepts for future Tier 3 work
External / Not Cloudflare · Shipped & Live
🗺
WorldMonitor
Public Live ✓
Vercel React + Vite
Real-time world events monitor. Live map of news, military movements, cyber threats, weather, AIS shipping, and more. Multiple variants + Tauri desktop app.
Variants: full, tech, finance, happy
MapLibre GL + Deck.gl + Convex real-time backend + Sentry + i18n
Desktop app via Tauri (macOS + Windows), PWA-capable
Full Playwright e2e suite, visual regression tests — v2.5.23
Personal Creative / Writing Projects
📖
The Book of Lives (Memória)
Public Live ✓
Vite SPA
A digital time capsule and living archive where people record who they are — memories, values, fears, dreams — at different points in their lives. Not a social network. A deliberate, structured registry of a human life, designed to persist across generations.
Full Vite SPA with hash router, localStorage persistence, i18n (EN/PT), dark/light mode
30 questions across 8 sections: Identity, Roots, Inner Life, Values, Taste, Craft, Time, Last Words
Sources: Proust Questionnaire + James Lipton (Inside the Actors Studio) + 7 Billion Others + original
10 snapshot questions (re-asked each capsule for longitudinal comparison)
Pages: landing, onboarding, dashboard, create (wizard), capsule-view, compare, archive, about
Demo mode with pre-filled capsule for immediate exploration
Built dist/ ready for deployment — auto-saves answers as you type
5 design docs: project brief, questionnaire, web app spec, exhibit concept, complete experience
🧭
Technology in the Age of Discoveries
Book project — research phase
Research
Book
A book about how Portugal, the smallest Western European maritime nation, pioneered the Age of Discoveries through systematic technological innovation, intelligence gathering, and state-sponsored secrecy — creating the world's first "innovation ecosystem."
20-chapter structure across 5 parts: Context, Technology, Knowledge, Impact, Legacy
2 sample chapters drafted: Ch. 10 (Arab/Muslim legacy) and Ch. 17 (Wreck of the São João)
Extensive bibliography: Crowley, Russell, Boxer, Diffie, Albuquerque, Cortesão
Research roadmap: Google Scholar queries, archives (Torre do Tombo, BN Digital), museums
Key thesis: Portugal treated navigation as state R&D — maps as state secrets, knowledge as weapon
Utilities, Scripts & Archives — Local tools built in sessions
🔖
Twitter Bookmarks → Notion
Local
Python HTML Dashboard
Pipeline to export X/Twitter bookmarks and import them into a Notion database. Includes a browser console script to scrape bookmarks, Python scripts to fetch full tweet data, and a Notion API manager for import/export. Plus a searchable HTML dashboard.
Browser console script (export_bookmarks_from_browser.js) to scrape bookmarks as JSON
Python pipeline: bookmarks.py → tweet_fetcher.py → notion_manager.py
Paul Graham tweet collector (pg_tweet_collector.js) — separate tool in same repo
Notion integration with full CRUD and categorization
HTML bookmarks dashboard (bookmarks.html) for local browsing
🌱
Garden of Ideas — Notion Export
Local
Python HTML
Exported and organized version of the "garden of ideas" link collection from Notion (the same content that powers joaotome.org). Python script builds a browsable HTML page from the Notion block export.
build_html.py converts Notion export blocks into clean HTML
Organized, categorized link collection — "emot's garden of ideas"
Source data from Notion block export (Part-1)
🦋
Bluesky Posts Exporter
Python script — local tool
Local
Python
Python script to export all posts from a Bluesky account into JSON and Markdown. Used to archive @radar.cloudflare.com's 462 posts (July 2023 – March 2026). Data feeds into the Knowledge Dashboard.
fetch_bluesky_posts.py — exports any account's full post history
462 posts exported from @radar.cloudflare.com (2023-07 to 2026-03)
Outputs: JSON (raw) + Markdown (readable, with dates)
🏎
Portfolio Template (Lewis Hamilton)
Demo
HTML + CSS + JS
Portfolio design experiment — a Lewis Hamilton-themed template with animated canvas grid background, Playfair Display typography, and hero image layers. Built as a design prototype; not deployed.
Animated grid canvas background (script.js)
Playfair Display typography, hero image composition
Clean HTML/CSS/JS — no framework, no build step
🏆
TWiN — Most Popular Episodes
Local
HTML
Generated page showing the most popular This Week in NET episodes. Built with a Node.js script (build-popular.js) that compiles episode data into a static HTML page.
🔗
LinkedIn Bookmarks
Local
HTML Dashboard
Exported LinkedIn bookmarks — scraped via browser console, cleaned, categorized, and rendered as a searchable HTML dashboard. Includes a how-to guide for scraping.
Bookmarks scraped, cleaned, and exported as CSV + JSON
Categorized version (linkedin-bookmarks-categorized.json)
Searchable HTML dashboard (bookmarks.html)
how-to-scrape-linkedin-bookmarks.md guide included
💹
Forex & Markets Dashboard
Local
Vanilla JS
Single-file forex and markets dashboard — currencies, stocks, crypto data.
📝
Cloudflare Blog Evaluation
Local
Vanilla JS Python
Blog post quality evaluation dashboard — 147 Cloudflare blog posts scored across 4 dimensions: CF Score (value to Cloudflare), Journo Score (writing quality), HN Score (Hacker News appeal), and Overall Score. Per-post strengths and improvement suggestions with improvement potential (1-10 scale).
147 posts evaluated across 4 scoring dimensions + improvement potential (1-10)
Sortable/filterable table with text search, dropdown filters, and category tags (Engineering, Product, Data/Research, Post-Mortem, etc.)
Slide-out detail panel with per-post strengths and improvement suggestions
Keyboard shortcuts (/ to search, Esc to dismiss), localStorage state persistence
Python build pipeline (build_dashboard.py) regenerates HTML from .docx review files — 841 lines, self-contained
📺
TWiN — YouTube & Podcast Strategy 2026
Local
HTML
Comprehensive 2026 growth strategy for This Week in NET — YouTube and podcast marketing plan. Includes episode chart data, guest photo archive, content guidelines, transcripts archive, and best-times publishing guide.
YouTube + podcast growth plan with Chart/Table/Totals CSV data
Guest suggestions (JSON), episode descriptions (CSV)
Content guidelines: thisweekinnet_content_guidelines.md + twin_llm_guidelines.md
TWiN transcripts archive and episodes context
🇮🇷
Iran Shutdown — Feb 2026 (data pack)
Local
HTML
Standalone data pack for the Iran Internet shutdown of February 28, 2026. HTML report + Radar chart PNGs (traffic volume, BGP, regional breakdown for IR, IL, QA) + blog draft [BLOG-3201] + Markdown narrative.
🛰
Starlink Traffic — Interactive Maps
Local
Vanilla JS
Interactive world maps showing Starlink traffic data by country from Cloudflare Radar. Two versions built — used as reference for the Index of Trends / Radar Reports design direction.
🔍
HN Explorer
Local
Vanilla JS
"Build Your Own Dashboard" — an interactive HN explorer for querying any site's posts on Hacker News (not just Cloudflare). Two versions: full and lite.
📄
Content Archive Browser (784 pieces)
Local
HTML
Browsable archive of all 784 content pieces in the Ask Emot corpus — blog posts, TWiN episodes, DN Insider, Dinheiro Vivo, Substack, Medium. Used to verify what's indexed.
WIP / Scaffolded — Not yet fully live
🖊
Collaborative Whiteboard
Worker not deployed
Not deployed
Worker Durable Objects
Real-time collaborative whiteboard — built with CF Durable Objects for persistent, consistent per-room state synced over WebSockets. Worker written, not deployed.
Durable Object (WhiteboardRoom) per room — single-writer consistent state
WebSocket-based real-time sync between all connected users
randomness-timecapsule
scaffolded — D1 id pending
Scaffold
Worker D1 R2
Backend for the Randomness Playground's time capsule feature. Encrypts messages with tlock, stores in R2, polls via cron to unlock, sends email via Resend.
Timelock encryption via tlock-worker.crypto-team.workers.dev
Cron trigger every minute — checks if any capsule can be unlocked
Email notification via Resend API on unlock
Finding an audience — what to prioritize
thisweekinnet.com High potential
Already has 100+ episodes and a real, recurring audience via YouTube/podcasts. The site is agent-ready but lacks SEO fundamentals: no per-episode pages means Google and AI crawlers see one SPA blob. Individual episode URLs would instantly multiply indexable surface, give each episode a shareable link, and make llms-full.txt vastly richer. The content exists — it just needs routes.
Next move: Add /episodes/:slug pages. Biggest SEO win across all projects.
Ask Emot High potential
784 pieces, working RAG, live and fast. The corpus is now broader too — not just Cloudflare and recent tech writing, but older Destak archive interviews and features. But zero discoverability remains the gap: it's still a standalone .workers.dev URL with no inbound links.
Next move: Embed on joaotome.com and link from all personal sites.
The Book of Lives (Memória) High potential
This is the most original and emotionally resonant project in the portfolio. The concept — a curated time capsule of a human life, designed to outlast the person — has no real competitor. The prototype exists, the questionnaire is designed, the app structure is scaffolded. The risk is it stays in prototype forever. A minimal launch (even just the questionnaire on a simple page) would test whether people actually fill it out.
Next move: Deploy the prototype publicly. Get 10 people to fill it out. Validate before building more.
seremot.com Medium — needs content
The Hugo site is live but has only 3 blog posts. The Agents playground and VizLab are interesting but underfilled. As a blog, it needs consistent publishing to build any audience. The infrastructure is fine — Hugo + CF Pages is fast and cheap. The gap is writing cadence. Even one post per month about Internet data, AI tooling, or Portuguese tech history would compound over time.
Next move: Commit to a publishing cadence. Cross-post from Substack or CF blog perspectives.
Harry Potter Covers Medium — niche but shareable
This is the kind of project that can go viral in the right context (Reddit's r/harrypotter, BookTok, Portuguese social media). The content is genuinely interesting — comparing cover art across 12 countries. The site is polished and live. The gap is distribution: it needs one well-placed share in a Harry Potter community.
Next move: Post to r/harrypotter, r/bookdesign, Harry Potter Facebook/Discord groups. Prepare a Portuguese version for PT media.
Randomness Playground Medium — waiting on domain
The product is finished and interactive. Once randomness.cloudflare.com is pointed to it, it becomes a canonical Cloudflare product page that will be linked from blog posts, docs, and talks about randomness/encryption. The audience is built-in (CF's existing traffic). The blocker is purely internal: get the domain pointed.
Next move: Internal request to point randomness.cloudflare.com custom domain.
Technology in the Age of Discoveries Low urgency — long-term
This is a book project, not a web product. The research is substantial (20 chapters planned, 2 drafted, extensive bibliography). There's no audience to "find" until it's published — but the research itself could be serialized as blog posts on seremot.com or Substack. Portuguese maritime technology is a niche but passionate audience (PT history buffs, maritime historians, Crowley readers).
Next move: Serialize 2-3 chapters as standalone essays on seremot.com. Test interest before committing to a full book.
Internal dashboards (Blog Analytics, HN Board, Socials) N/A — internal tools
These are internal tools behind Cloudflare Access. They don't need a public audience — they need internal adoption. The Blog Analytics and HN Board are already referenced by the blog team. The Socials Dashboard v2 is the most feature-complete but may need a champion on the social team to drive adoption. The value isn't traffic — it's whether the comms team uses them weekly.
Next move: Demo the Socials v2 dashboard to the social team. Get it into their weekly workflow.
What has been achieved
Personal presence & identity
The personal web now looks like a system, not a scattered set of experiments. joaotome.com, seremot.com, joaotome.org, ask-emot, casamagia.org, and book-of-lives each serve a different role — portfolio, blog, idea garden, AI assistant, playful educational world, and memory project — but they reinforce the same identity: writing, product thinking, storytelling, and publishing on the open Web. Ask Emot is now a real RAG product over 784 pieces of published writing, grounded and cited, spanning Cloudflare, Portuguese tech/business coverage, and older Destak archive interviews.
Show & content infrastructure (TWiN)
thisweekinnet.com went from a static page to an agent-ready web property: RFC 8288 Link headers, llms.txt, A2A agent card, MCP server card, and an Accept: text/markdown content negotiation layer — making it one of the first show sites built for AI crawler discoverability. Two companion Workers (episodes API + blog RSS proxy) serve as the data layer. The same agent-ready thinking now shows up again in other work, like the Cloudflare Lisbon meetups site and the Radar reports/index planning.
Internal analytics tooling (Cloudflare org)
The Cloudflare work is no longer just dashboards. It now spans analytics tools, publishing systems, product prototypes, and community pages: Blog Analytics, HN Board, Socials Dashboard v2, Blog Revamp, Cloudflare Lisbon Engineering Meetups, and two Radar product workstreams — Index of Trends and Radar Reports. That includes live Pages prototypes, deeper PRD work, roadmap writing, and reusable patterns for how Cloudflare pages can become more searchable, more structured, and easier to publish.
Public educational & fun projects
The public-facing work is stronger and broader than a normal side-project collection. Randomness Playground turns a hard technical subject into an interactive product page with real entropy sources, quizzes, and demos. A Casa de Magia e Feitiçaria has grown from a covers viewer into a full multilingual Harry Potter learning-and-play world with cloud sync, mini-games, public leaderboards, and an educational frame aimed at kids, parents, and teachers. Both feel like complete products, not sketches.
CF primitives used across projects
There is now enough repetition across the work to see a real stack preference: Workers for logic and glue, Pages for publishing, KV for lightweight state, D1/Vectorize/Workers AI for retrieval and AI features, and R2/cron for background workflows. The point is not just using Cloudflare primitives; it is using them repeatedly across different kinds of products until patterns become reusable. Total: 19 projects across shipped sites, internal tools, product mockups, and creative writing.
Suggested next additions
Ask Emot — embed on joaotome.com
ask-emot is live as a standalone Worker URL but not linked from joaotome.com. An /ask route or a sidebar widget on the portfolio would close the loop and make it discoverable to real visitors.
Integration
TWiN — episode-level pages
thisweekinnet.com is a SPA with no indexable per-episode URLs. Individual episode pages would improve SEO, give AI crawlers direct access to episode content, and make the llms-full.txt much richer. This is probably the highest-leverage public publishing improvement on the board.
SEO / Agent
randomness.cloudflare.com — finish the deploy
The Pages site is live and complete. The remaining work is configuration: point the custom domain, wire the timecapsule Worker cleanly, and turn a strong prototype into the canonical public Cloudflare URL.
Easy win
Index of Trends — move from mockup to pilot
This is worth more than another mockup pass. The PRD, roadmap, and live prototype already exist. The next real milestone is operational: publish a first batch of 10+ entries, prove the tagging model, and get one trend flowing to a real Radar surface.
Productization
Radar Reports — ship one canonical pilot
The prototypes and writing system are strong enough. The next useful step is one canonical Tier 2 report produced through the new workflow end-to-end: authoring, components, metadata, render, and publish. That proves the system better than more PRD work.
Pilot
Casa Magia — distribution, not more scope
casamagia.org already has enough depth. The obvious next move is audience work: school sharing, Instagram/Reels, Portuguese HP communities, and a few testimonials. This looks like a distribution problem now, not a product problem.
Growth
A Short Note
Building the Web, a Little Faster — With OpenCode, GPT-5.4, and Claude
Most of what is on this board was built inside OpenCode, using GPT-5.4 and Claude as practical collaborators for research, writing, editing, structuring, and coding. The model was not used to replace thinking, but to cut the distance between an idea and a live artifact. That usually meant: inspect the real problem, prototype quickly, write the PRD or the page, ship a working version, then iterate in public.
What actually got done — concrete examples
What worked
What this means for future work — for me
What this might mean for others
The useful part of this stack has not been "using AI" as a slogan. It has been reducing the distance between an idea, a draft, and a live artifact — whether that artifact is a dashboard, a Worker, a Pages prototype, a report system, or a better way to publish on the Web. The next year is about doing more of that, with more intent, and leaving a clearer trail for whoever wants to pick up the same patterns.