{"name":"Sharif Mohammad Nasrullah — Portfolio API","version":"1.0.0","description":"Public and authenticated API endpoints for the portfolio. All public endpoints return JSON and require no authentication. Admin endpoints require a NextAuth admin session. The MCP endpoint requires a bearer token.","baseUrl":"https://sharif.dev","endpoints":[{"path":"/api/health","method":"GET","auth":"none","description":"Lightweight health-check endpoint for Docker/UptimeRobot. No DB query.","response":{"status":"ok","timestamp":"2025-01-15T10:30:00.000Z","version":"1.0.0","uptime":3600,"environment":"production"}},{"path":"/api/stats","method":"GET","auth":"none","cache":"60s server, 300s SWR","description":"Public portfolio statistics — content counts, engagement metrics, infrastructure status, and featured projects.","response":{"brand":{"name":"Sharif Mohammad Nasrullah","title":"Full-Stack Web & AI Application Architect"},"content":{"projects":{"total":5,"published":5,"featured":3},"blogPosts":{"total":11,"published":11},"showcases":2,"services":4,"faqs":8,"skills":27},"engagement":{"totalProjectViews":3,"totalBlogViews":154,"totalViews":157},"infrastructure":{"operationalServers":5,"uptimePct":99.98}}},{"path":"/api/projects","method":"GET","auth":"none","description":"List all published projects with tech stack, timeline, engagement value, and live URLs."},{"path":"/api/blog","method":"GET","auth":"none","description":"List all published blog posts with category, tags, reading time, and view counts."},{"path":"/api/services","method":"GET","auth":"none","description":"List all published service offerings with deliverables, pricing, and timelines."},{"path":"/api/faqs","method":"GET","auth":"none","description":"List all published FAQ entries grouped by category."},{"path":"/api/skills","method":"GET","auth":"none","description":"List all tech skills grouped by category with proficiency levels."},{"path":"/api/server-metrics","method":"GET","auth":"none","description":"Live server infrastructure metrics — server name, region, status, latency, uptime, connections."},{"path":"/api/dream-features","method":"GET","auth":"none","description":"Platform showcase features (deep-dives) with content, metrics, and code examples."},{"path":"/api/dream-graph","method":"GET","auth":"none","description":"Architecture diagram nodes and edges for the Dream Network showcase."},{"path":"/api/process","method":"GET","auth":"none","description":"Engagement process steps with deliverables and durations."},{"path":"/api/about","method":"GET","auth":"none","description":"About/architect profile — headline, bio, philosophy, stats, highlights, tools."},{"path":"/api/site-config","method":"GET","auth":"none","description":"Site configuration — brand, hero, meta, social links, tech stack, trust stats."},{"path":"/feed.xml","method":"GET","auth":"none","description":"RSS 2.0 feed for blog posts. Standard XML format for traditional feed readers."},{"path":"/feed.json","method":"GET","auth":"none","description":"JSON Feed 1.1 for blog posts. Modern alternative to RSS."},{"path":"/api/contact","method":"POST","auth":"none (rate limited)","description":"Submit a contact/qualification form. Validates name, email, bottleneck, project type, timeline, budget.","body":{"name":"Jane Founder","email":"jane@startup.io","company":"Acme Inc","bottleneck":"Our checkout flow drops 40% of users","projectType":"MVP","timeline":"4-8 weeks","budget":"$10,000-$25,000","message":"We need a Next.js expert to rebuild our checkout."}},{"path":"/api/guestbook","method":"GET","auth":"none","description":"List approved guestbook entries (social proof testimonials)."},{"path":"/api/newsletter","method":"POST","auth":"none (rate limited)","description":"Subscribe to the newsletter. Validates email, deduplicates, sets active=true.","body":{"email":"subscriber@example.com","name":"Jane","source":"writing-blog-post"}},{"path":"/api/mcp","method":"POST","auth":"Bearer token (snmcp_…)","description":"MCP (Model Context Protocol) Streamable HTTP endpoint. 39 tools for managing portfolio content. Rate limited: 120 req/min per token. Audit logged.","docs":"/admin/mcp"},{"path":"/api/webmention","method":"POST","auth":"none (rate limited)","description":"Webmention endpoint (W3C spec). Receive notifications when another site links to this one. Accepts form-encoded or JSON with source and target URLs. Verifies the link synchronously.","body":{"source":"https://example.com/blog/post","target":"https://sharif.dev/writing/some-essay"}},{"path":"/api/pingback","method":"POST","auth":"none (rate limited)","description":"Pingback endpoint (XML-RPC fallback to Webmention). Accepts XML-RPC, JSON, or form-encoded with source and target URLs."},{"path":"/api/mentions","method":"GET","auth":"none","description":"Public list of approved webmentions and pingbacks for a target URL. Query param: target (URL). Only returns approved mentions."},{"path":"/api/admin/*","method":"GET/POST/PATCH/DELETE","auth":"Admin session (NextAuth)","description":"Admin CRUD APIs for all content types. Requires authenticated admin session."}],"mcp":{"url":"/api/mcp","transport":"streamable-http (stateless, JSON response mode)","auth":"Bearer token (snmcp_ prefix)","tokens":"Created at /admin/mcp","tools":39,"resources":4,"rateLimit":"120 req/min per token","docs":"/admin/mcp"},"generatedAt":"2026-08-02T00:49:15.963Z"}