How suv4o/personal-blog-2023 works
Aleks Blog is a Nuxt-based personal publishing site with article and category browsing, photography and keyboard-lab sections, contact/newsletter features, and WebMCP tools. The reader workflow is to browse a listing or navigate to a page, read an article or view a photo, and optionally explore related content. Article similarity data is prepared during Nuxt configuration and served by a server API; photo similarity uses a separate API and embedding file. The excerpts do not show page-to-content wiring or client calls to APIs/functions, so those links are omitted or marked unverified.
Main entry points: index.ts Newsletter and contact handlers · similar-articles/[...slug].get.ts Article similarity API · similar-photos/[...slug].get.ts Photo similarity API · [...slug].vue Page routes
Components 22
Publishing and navigation
- Page routes
app/pages/[...slug].vue - Category listings
app/pages - Article view
app/components/SinglePost.vue - Site navigation
app/layouts/default.vue
Interactive sections
- Photo galleries
app/components/ThroughTheLens - Keyboard lab
app/components/TheKeyboardLab - WebMCP tools
app/composables/useMcpTool.ts
Related-content services
- Article similarity API
server/api/similar-articles/[...slug].get.ts - Photo similarity API
server/api/similar-photos/[...slug].get.ts - Cosine scoring
server/utils/cosine-similarity.ts - Article embeddings
server/utils/file-paths.ts - Photo embeddings
server/api/similar-photos/[...slug].get.ts - Embedding generation
nuxt.config.ts - Embedding helpers
app/utils/process-embeddings.ts
Reader engagement
- Contact form
app/components/GetInTouch.vue - Newsletter flows
app/components/Subscribe.vue - Newsletter and contact handlers
functions/src/index.ts
Other components
- Reader
- WebMCP runtime
- Mailgun
- Subscriber records
- Google reCAPTCHA
Connections 23
- Reader → Page routes: opens pages
- Reader → Category listings: browses topics
- Reader → Photo galleries: views photos
- Reader → Keyboard lab: explores lab
- Reader → Contact form: sends inquiry
- Reader → Newsletter flows: manages subscription
- Reader → WebMCP tools: invokes tools
- Page routes → Article view: renders
- Site navigation → Page routes: frames pages
- Article view → Article similarity API: requests related articles
- Photo galleries → Photo similarity API: requests similar photos
- Article similarity API → Article embeddings: reads embeddings
server/api/similar-articles/[...slug].get.ts - Article similarity API → Cosine scoring: scores articles
server/api/similar-articles/[...slug].get.ts - Photo similarity API → Photo embeddings: reads embeddings
server/api/similar-photos/[...slug].get.ts - Photo similarity API → Cosine scoring: scores photos
server/api/similar-photos/[...slug].get.ts - Embedding generation → Embedding helpers: generates vectors
nuxt.config.ts - Embedding generation → Article embeddings: writes vectors
nuxt.config.ts - WebMCP tools → WebMCP runtime: registers tools
app/composables/useMcpTool.ts - Contact form → Newsletter and contact handlers: submits inquiry
- Newsletter flows → Newsletter and contact handlers: submits subscription
- Newsletter and contact handlers → Subscriber records: reads and writes
functions/src/index.ts - Newsletter and contact handlers → Mailgun: sends email
functions/src/index.ts - Newsletter and contact handlers → Google reCAPTCHA: verifies token
functions/src/index.ts