Back to site

README

The developer portal for starikov.dev — principles and metadata for humans; an MCP server and Markdown editions for agents. Tokens and the component registry live under the Components tab, the change workflow under Checklist.

Keep the shape

The site borrows the familiar rhythm of a messaging app, but the content stays personal: brief, direct, and useful.

A change belongs when it clarifies the story, improves the interaction, or makes the system easier to extend.
  • Identity onceThe fixed header owns the avatar and name. Don’t repeat them in the opening content.
  • One-handedPrimary navigation stays reachable at the bottom and never scrolls sideways.
  • Plain firstSemantic HTML and durable links before effects or abstraction.
  • Two modesEvery new color must work in both system light and dark themes.

App metadata

The site is installable and link-preview ready. Every page carries the full head block — favicon, app icons, manifest hooks, and Open Graph/Twitter tags.

  • Faviconassets/favicon.svg (green rounded square, white h) with a favicon.ico fallback for older browsers. The old data:, empty-favicon hack is gone.
  • App iconsicon-192.png / icon-512.png for the manifest, icon-512-maskable.png (padded safe zone) for adaptive launchers, apple-touch-icon.png (180px, full-bleed) for iOS.
  • Installablemanifest.webmanifest (standalone, Herman, theme #f0f2f5) plus sw.js — a deliberately passthrough service worker. It exists because the install prompt requires a fetch handler; it caches nothing, so the tab SPA can never render a stale page. site.js registers it on window load.
  • Social previewassets/og-image.jpg (1200×630, avatar + name + tagline). Each page sets its own og:title/og:url/og:description and shares the image; twitter:card is summary_large_image everywhere.
  • Avatarassets/avatar.jpg (512px face crop) is the source; the header and message-bubble avatars ship as assets/avatar-176.webp (176px, ~5KB) with a JPEG fallback via <picture>. assets/herman.jpg is the full portrait (also the JSON-LD image).

Developer resources

The site ships a machine-readable surface next to the pages: an MCP server, an llms.txt index, and a hand-maintained Markdown edition of every page.

  • MCP serverhttps://starikov.dev/mcp — Streamable HTTP, no auth. Tools: site_index (what the site is), get_page (a page's Markdown edition), get_contact (verified channels). A GET on the endpoint returns a connect description.
  • ClaudeRun claude mcp add --transport http starikov-dev https://starikov.dev/mcp. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → paste the URL.
  • CursorSettings → MCP → Add new MCP server: name starikov-dev, transport streamable-http, URL https://starikov.dev/mcp. Or add to .cursor/mcp.json: {"mcpServers": {"starikov-dev": {"url": "https://starikov.dev/mcp"}}}.
  • ChatGPTPaid plans: Settings → Apps → Advanced settings → enable Developer mode, then Apps → Create app with the MCP URL https://starikov.dev/mcp and auth none. (OpenAI renames these labels — look for Connectors/Apps.)
  • llms.txt/llms.txt — the site index for agents: when to use the site, the page list, and how it's built.
  • Agent editionsEvery page ships a Markdown edition — request any page with Accept: text/markdown, or pull it through the MCP get_page tool. Page content and its .md ship in the same commit.

Deep dives

Long-form notes on the parts of the site that earned them. This index stays the quick reference; the deep dives hold the full stories, dead ends included.

  • DockAnatomy, the pointerdown/click interaction contract, and the full saga of keeping the tab bar above Android's gesture bar.

Tools

  • ReviewHighlight text on any page, attach comments, then copy the batch as one prompt for Muse. Highlights live in this browser only.