{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github-miantiao-me--hacker-podcast","slug":"miantiao-me--hacker-podcast","name":"hacker-podcast","type":"agent","url":"https://hacker-podcast.agi.li","page_url":"https://unfragile.ai/miantiao-me--hacker-podcast","categories":["automation"],"tags":["ai","ai-agent","ai-workflow","cloudflare","cloudflare-workers","cloudflare-workflows","hacker-news","nextjs"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"pending_review","verified":false},"capabilities":[{"id":"github-miantiao-me--hacker-podcast__cap_0","uri":"capability://automation.workflow.scheduled.hacker.news.content.scraping.with.cron.triggered.workflows","name":"scheduled hacker-news content scraping with cron-triggered workflows","description":"Automatically fetches top stories from Hacker News API on a fixed daily schedule (23:30 UTC) using Cloudflare Workflows' cron trigger system. The scraper extracts article metadata (title, URL, score, comments) and stores raw content in Cloudflare KV for downstream processing. Uses exponential backoff retry logic built into the WorkflowEntrypoint pattern to handle transient failures without manual intervention.","intents":["I want to automatically collect trending tech news daily without manual polling","I need a reliable scraping pipeline that retries on failure and logs execution state","I want to trigger content processing only once per day at a specific UTC time"],"best_for":["teams building automated content aggregation services","developers deploying serverless workflows on Cloudflare Workers"],"limitations":["Cron trigger is fixed to 23:30 UTC — no dynamic scheduling per user timezone","Hacker News API rate limits (~30 requests/min) may throttle if scraping multiple times daily","Workflow execution state persists in Cloudflare Durable Objects — no cross-region failover"],"requires":["Cloudflare Workers account with Workflows enabled","Hacker News API access (public, no auth required)","Cloudflare KV namespace for state storage","wrangler CLI 3.0+ for deployment"],"input_types":["Hacker News API JSON response"],"output_types":["structured article metadata stored in Cloudflare KV","workflow execution logs with timestamps and retry counts"],"categories":["automation-workflow","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_1","uri":"capability://text.generation.language.dual.host.podcast.script.generation.with.ai.powered.summarization.and.dialogue.synthesis","name":"dual-host podcast script generation with ai-powered summarization and dialogue synthesis","description":"Converts scraped Hacker News articles into Chinese-language podcast scripts using @ai-sdk/openai-compatible's generateText function with configurable LLM backends (OpenAI, Anthropic, or compatible APIs). The system generates structured dialogue between two hosts discussing each article, including summaries, key insights, and conversational transitions. Uses prompt engineering to enforce consistent speaker roles and Chinese language output, with fallback handling for API failures.","intents":["I want to automatically generate engaging podcast scripts from news articles in Chinese","I need to support multiple LLM providers without rewriting the generation logic","I want to ensure consistent dialogue structure and speaker differentiation in the output"],"best_for":["content creators automating podcast production in non-English languages","teams building multi-provider LLM applications with fallback support"],"limitations":["LLM generation latency adds 5-15 seconds per article depending on provider and model size","Chinese language quality depends on model training data — may produce awkward phrasing for technical terms","No built-in fact-checking — LLM may hallucinate or misinterpret article content","Token costs scale linearly with article count — no batching or caching of similar summaries"],"requires":["OpenAI API key or compatible LLM endpoint (Anthropic, local Ollama, etc.)","Minimum 4k context window for article + prompt + dialogue generation","@ai-sdk/openai-compatible library (included in project)","Chinese language model (GPT-4, Claude 3+, or equivalent)"],"input_types":["article metadata (title, URL, content text)","speaker role definitions (host A, host B)"],"output_types":["structured JSON with speaker-tagged dialogue segments","plain text podcast script with speaker labels"],"categories":["text-generation-language","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_10","uri":"capability://image.visual.image.lightbox.and.media.gallery.for.episode.cover.art.and.related.visuals","name":"image lightbox and media gallery for episode cover art and related visuals","description":"Implements a lightbox component for displaying and navigating episode cover art and related images using a modal overlay with keyboard navigation (arrow keys, Escape to close). Images are lazy-loaded from Cloudflare R2 CDN and displayed at full resolution with zoom and pan capabilities. The lightbox is triggered by clicking on episode cover art or related images and supports touch gestures on mobile (swipe to navigate).","intents":["I want to display high-resolution episode cover art in a lightbox without external libraries","I need to support keyboard and touch navigation for accessibility","I want to lazy-load images from CDN to minimize initial page load"],"best_for":["podcast platforms with visual content (cover art, speaker photos)","teams building accessible media galleries on Cloudflare Workers"],"limitations":["Lightbox requires client-side JavaScript — no server-side rendering","Touch gesture detection is browser-dependent — may not work on all mobile browsers","Image zoom is limited to viewport size — very large images may be cut off","No image optimization or responsive images — all images are served at full resolution"],"requires":["React 19 for component rendering","Cloudflare R2 for image hosting with public CDN access","CSS for modal overlay and animations"],"input_types":["image URL from R2","image alt text for accessibility"],"output_types":["HTML modal with image display","keyboard and touch event handlers"],"categories":["image-visual"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_11","uri":"capability://automation.workflow.environment.based.configuration.management.for.multi.environment.deployment","name":"environment-based configuration management for multi-environment deployment","description":"Manages application configuration (API keys, provider selection, feature flags) through environment variables loaded from .env files and Cloudflare Workers secrets. Supports separate configurations for development (local), staging, and production environments without code changes. Configuration is validated at startup using TypeScript types, ensuring type safety and preventing runtime errors from missing or invalid settings. Implements fallback defaults for optional settings (e.g., TTS provider defaults to Edge TTS if not specified).","intents":["I want to deploy the same codebase to development, staging, and production with different configurations","I need to manage API keys and secrets securely without committing them to version control","I want to enable/disable features (e.g., TTS provider) without code changes"],"best_for":["teams managing multi-environment deployments on Cloudflare Workers","developers using TypeScript for configuration validation"],"limitations":["Environment variables must be set manually in Cloudflare dashboard — no automated provisioning","Configuration changes require worker redeploy — no hot-reload for config updates","Secrets are not encrypted at rest in Cloudflare — rely on Cloudflare's security model","No audit trail for configuration changes — cannot track who changed what and when"],"requires":[".env file for local development (not committed to git)","Cloudflare Workers secrets for production (set via wrangler secret put)","TypeScript for configuration type definitions","wrangler CLI 3.0+ for secret management"],"input_types":["environment variables (API keys, provider names, feature flags)",".env file or Cloudflare secrets"],"output_types":["validated configuration object","type-safe access to settings throughout the application"],"categories":["automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_2","uri":"capability://image.visual.multi.provider.text.to.speech.conversion.with.configurable.voice.synthesis","name":"multi-provider text-to-speech conversion with configurable voice synthesis","description":"Converts podcast scripts into audio using pluggable TTS providers: Edge TTS (free, Microsoft-backed), Minimax HTTP API (Chinese-optimized), and Murf HTTP API (high-quality voices). Each provider is abstracted behind a common interface that accepts speaker-tagged script segments and returns per-speaker audio buffers. The system selects providers based on configuration and handles provider-specific audio format conversions (MP3, WAV, etc.) transparently.","intents":["I want to convert Chinese podcast scripts to natural-sounding audio without vendor lock-in","I need to support multiple TTS providers and switch between them based on cost or quality","I want per-speaker voice customization (different voices for host A vs host B)"],"best_for":["podcast producers requiring Chinese TTS with natural prosody","teams building multi-provider audio synthesis pipelines","cost-conscious builders wanting free (Edge TTS) + premium (Minimax) options"],"limitations":["Edge TTS is free but has lower voice quality and no Chinese language support in some regions","Minimax and Murf require API keys and per-minute billing — costs scale with episode length","TTS latency ranges 2-10 seconds per speaker segment depending on provider and audio length","No real-time streaming — entire script must be synthesized before audio merging begins","Voice customization is provider-specific — switching providers may require re-tuning voice parameters"],"requires":["API keys for selected TTS providers (Minimax, Murf) or free Edge TTS access","@echristian/edge-tts library for Edge TTS integration","HTTP client for Minimax/Murf API calls (built into project)","Audio format support: MP3 or WAV output from provider"],"input_types":["speaker-tagged podcast script segments (JSON or plain text)","voice configuration (speaker ID, voice name, language, speed)"],"output_types":["per-speaker audio buffers (MP3 or WAV format)","audio metadata (duration, sample rate, channels)"],"categories":["image-visual","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_3","uri":"capability://image.visual.ffmpeg.based.audio.merging.and.mp3.encoding.in.browser.runtime","name":"ffmpeg-based audio merging and mp3 encoding in browser runtime","description":"Merges per-speaker audio segments into a single podcast episode using FFmpeg.js, a JavaScript port of FFmpeg compiled to WebAssembly. Runs entirely within the Cloudflare Worker browser runtime (no external FFmpeg binary required), concatenating speaker audio buffers with silence padding between segments and encoding the final output as MP3. Handles audio format normalization (sample rate, channels) and metadata embedding (ID3 tags with episode title, artist, date).","intents":["I want to merge multiple speaker audio files into a single podcast MP3 without external dependencies","I need audio processing to run serverless without provisioning FFmpeg infrastructure","I want to embed podcast metadata (title, date, cover art) into the final MP3 file"],"best_for":["serverless podcast production pipelines on Cloudflare Workers","teams avoiding external audio processing services (AWS Elemental, Mux)","builders needing deterministic, reproducible audio encoding"],"limitations":["FFmpeg.js adds ~50MB to worker bundle size, increasing cold start latency by 2-5 seconds","Audio merging latency is 10-30 seconds depending on total episode length and CPU availability","Cloudflare Workers have 30-second CPU timeout — episodes longer than ~20 minutes may timeout","No real-time streaming output — entire MP3 must be generated before upload to R2","Memory usage scales with audio length — very long episodes may exceed worker memory limits (128MB)"],"requires":["FFmpeg.js library (included in project dependencies)","Cloudflare Workers runtime with WebAssembly support","Per-speaker audio buffers in compatible format (WAV or MP3)","ID3 metadata library for MP3 tag embedding"],"input_types":["array of audio buffers (one per speaker)","audio metadata (sample rate, channels, duration)","episode metadata (title, date, cover art URL)"],"output_types":["single MP3 file with embedded ID3 tags","audio file metadata (duration, bitrate, file size)"],"categories":["image-visual","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_4","uri":"capability://data.processing.analysis.cloudflare.kv.and.r2.storage.with.automatic.episode.persistence.and.retrieval","name":"cloudflare kv and r2 storage with automatic episode persistence and retrieval","description":"Stores generated podcast episodes in a two-tier storage system: Cloudflare KV holds episode metadata (title, date, summary, speaker names) as JSON documents with TTL-based expiration, while Cloudflare R2 (S3-compatible object storage) persists the final MP3 audio files with public CDN URLs. The system implements a caching layer in KV to avoid repeated metadata lookups and uses R2's built-in versioning for episode rollback. Metadata keys follow a date-based naming scheme (YYYY-MM-DD) for efficient pagination and retrieval.","intents":["I want to store podcast episodes durably without managing a database or S3 bucket","I need fast metadata lookups for the web frontend with automatic cache invalidation","I want to serve audio files globally with CDN acceleration and no egress costs"],"best_for":["serverless podcast platforms on Cloudflare Workers","teams avoiding external databases (PostgreSQL, MongoDB) for simple key-value data","builders leveraging Cloudflare's global CDN for audio distribution"],"limitations":["KV has eventual consistency — metadata updates may take up to 60 seconds to propagate globally","KV is not suitable for complex queries — no SQL or full-text search (must fetch all keys to filter)","R2 egress is free but limited to Cloudflare's network — downloading outside Cloudflare incurs standard egress costs","KV has a 25MB value size limit — cannot store large metadata blobs or audio files directly in KV","No built-in backup or disaster recovery — R2 versioning must be manually enabled and managed"],"requires":["Cloudflare Workers account with KV and R2 enabled","KV namespace binding in wrangler.jsonc (configured as 'PODCAST_KV')","R2 bucket binding in wrangler.jsonc (configured as 'PODCAST_R2')","Cloudflare API token for programmatic access (if using wrangler CLI)"],"input_types":["episode metadata object (title, date, summary, speakers)","MP3 audio file buffer","R2 object key (date-based path)"],"output_types":["JSON metadata from KV","public CDN URL for R2 audio file","episode list with pagination tokens"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_5","uri":"capability://automation.workflow.rss.feed.generation.with.podcast.compatible.metadata.and.multi.platform.distribution","name":"rss feed generation with podcast-compatible metadata and multi-platform distribution","description":"Generates a standards-compliant RSS 2.0 feed with podcast-specific extensions (iTunes, Podtrac, Spotify) that enables distribution to Apple Podcasts, Spotify, YouTube, and 小宇宙 (Chinese podcast platform). The feed is dynamically generated from KV metadata on each request, including episode title, description, audio URL, publication date, and cover art. Implements caching headers (ETag, Cache-Control) to reduce regeneration overhead and uses RSS validation to ensure compatibility with podcast aggregators.","intents":["I want to distribute my AI-generated podcast to major platforms (Apple, Spotify, YouTube) automatically","I need to generate RSS feeds dynamically without static file generation or external RSS services","I want to track podcast distribution with Podtrac analytics and ensure platform-specific metadata"],"best_for":["podcast creators distributing to multiple platforms simultaneously","teams building automated podcast publishing pipelines","developers avoiding external RSS hosting services (Transistor, Podbean)"],"limitations":["RSS generation latency is 500-1000ms per request due to KV metadata lookups — no pre-generated static feeds","Podcast platforms cache RSS feeds for 24-48 hours — new episodes may not appear immediately","iTunes and Spotify have strict metadata validation — missing or malformed fields cause submission rejection","Cover art must be 1400x1400 to 3000x3000 pixels — smaller images are rejected by some platforms","Chinese podcast platforms (小宇宙) have proprietary metadata requirements not covered by standard RSS"],"requires":["RSS 2.0 schema knowledge and podcast namespace extensions (iTunes, Podtrac)","Valid podcast cover art (JPEG or PNG, 1400-3000px)","Episode metadata in Cloudflare KV with consistent date format (ISO 8601)","Cloudflare Workers with RSS generation endpoint (app/rss.xml/route.ts)"],"input_types":["episode metadata from KV (title, date, description, audio URL)","podcast channel metadata (title, author, cover art URL, description)"],"output_types":["RSS 2.0 XML document with podcast extensions","HTTP headers for caching (ETag, Cache-Control, Last-Modified)"],"categories":["automation-workflow","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_6","uri":"capability://text.generation.language.paginated.episode.listing.with.date.based.navigation.and.metadata.display","name":"paginated episode listing with date-based navigation and metadata display","description":"Renders a paginated homepage displaying podcast episodes in reverse chronological order (newest first) using Next.js App Router and React 19 components. Fetches episode metadata from Cloudflare KV in batches (e.g., 10 episodes per page) and implements client-side pagination controls with URL-based state (query parameters for page number). Each episode card displays title, publication date, summary, speaker names, and a link to the full episode page. Uses Tailwind CSS 4 and shadcn/ui components for responsive design.","intents":["I want to display podcast episodes in a paginated list without loading all episodes at once","I need to implement URL-based pagination so users can share and bookmark specific pages","I want to show episode metadata (date, summary, speakers) in a visually appealing card layout"],"best_for":["podcast platforms with growing episode libraries (100+ episodes)","teams building responsive web interfaces on Cloudflare Workers","developers using Next.js App Router with edge runtime constraints"],"limitations":["KV pagination requires fetching all keys and filtering in-memory — inefficient for 1000+ episodes","No full-text search on homepage — users cannot search episodes by title or content","Pagination state is URL-based only — no persistent user preferences (e.g., episodes per page)","Client-side pagination adds JavaScript bundle size (~50KB for React + shadcn/ui)","KV eventual consistency may cause pagination gaps if episodes are added during browsing"],"requires":["Next.js 15+ with App Router and Cloudflare Workers runtime","React 19 for component rendering","Tailwind CSS 4 and shadcn/ui component library","Episode metadata in Cloudflare KV with consistent date-based keys"],"input_types":["page number (query parameter)","items per page (hardcoded or configurable)","episode metadata from KV"],"output_types":["HTML page with episode cards","pagination controls (previous, next, page numbers)","metadata for each episode (title, date, summary, speakers)"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_7","uri":"capability://text.generation.language.per.episode.detail.page.with.full.metadata.audio.player.and.related.content","name":"per-episode detail page with full metadata, audio player, and related content","description":"Renders a dedicated page for each podcast episode (route: /episode/[date]) displaying full episode metadata (title, publication date, summary, speaker names), an embedded audio player powered by @vidstack/react, and related content links (original Hacker News articles, speaker bios). The page is server-side rendered using Next.js dynamic routes with date-based parameters, fetching episode data from Cloudflare KV and audio URL from R2. Implements Open Graph metadata for social sharing and structured data (JSON-LD) for search engine indexing.","intents":["I want to display a full episode page with audio player and metadata without external hosting","I need to generate unique URLs for each episode that are shareable on social media","I want to embed rich metadata (title, description, cover art) for SEO and social sharing"],"best_for":["podcast platforms requiring detailed episode pages with audio playback","teams building SEO-optimized podcast websites on Cloudflare Workers","developers using Next.js dynamic routes with edge runtime"],"limitations":["Dynamic route generation requires server-side rendering — no static pre-generation for all episodes","Audio player state (playback position, volume) is not persisted across sessions — no resume functionality","@vidstack/react adds ~100KB to bundle size, increasing page load time","Open Graph image generation requires external service or pre-generated images — no dynamic image generation","JSON-LD structured data may not be indexed immediately by search engines"],"requires":["Next.js 15+ with App Router and dynamic route support ([date] parameter)","@vidstack/react for audio player component","Episode metadata in Cloudflare KV with date-based keys (YYYY-MM-DD)","Audio file URL from Cloudflare R2 with public CDN access"],"input_types":["date parameter from URL (YYYY-MM-DD format)","episode metadata from KV","audio URL from R2"],"output_types":["HTML page with episode details and audio player","Open Graph meta tags for social sharing","JSON-LD structured data for search engines"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_8","uri":"capability://automation.workflow.workflow.orchestration.with.automatic.retry.exponential.backoff.and.state.persistence","name":"workflow orchestration with automatic retry, exponential backoff, and state persistence","description":"Implements a HackerNewsWorkflow class extending Cloudflare Workflows' WorkflowEntrypoint, orchestrating the entire content pipeline (scrape → summarize → TTS → merge → store) as a sequence of steps with built-in error handling. Each step is idempotent and can be retried independently with exponential backoff (1s, 2s, 4s, 8s, etc.). Workflow state is persisted in Cloudflare Durable Objects, enabling recovery from transient failures without restarting the entire pipeline. Implements structured logging at each step for debugging and monitoring.","intents":["I want to orchestrate a multi-step content pipeline with automatic retry and failure recovery","I need to monitor pipeline execution with detailed logs and state tracking","I want to ensure each step is idempotent so retries don't cause duplicate processing"],"best_for":["teams building complex serverless workflows on Cloudflare Workers","developers needing reliable, fault-tolerant content processing pipelines","builders avoiding external orchestration tools (Temporal, Airflow, Step Functions)"],"limitations":["Workflow state is stored in Durable Objects — no cross-region replication or disaster recovery","Exponential backoff is hardcoded — no configurable retry policies per step","Workflow execution logs are not persisted to external systems — logs are lost if worker restarts","Maximum workflow duration is limited by Cloudflare Workers timeout (30 seconds) — long pipelines may timeout","No built-in alerting or notifications — failures must be detected by polling logs"],"requires":["Cloudflare Workers with Workflows API enabled","Cloudflare Durable Objects for state persistence","WorkflowEntrypoint base class from @cloudflare/workers-types","Idempotent step implementations (no side effects on retry)"],"input_types":["workflow trigger (cron schedule or manual invocation)","step input parameters (article metadata, TTS provider config, etc.)"],"output_types":["workflow execution status (pending, running, completed, failed)","step-level logs with timestamps and error messages","final output (stored episode in R2 and metadata in KV)"],"categories":["automation-workflow","planning-reasoning"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github-miantiao-me--hacker-podcast__cap_9","uri":"capability://text.generation.language.responsive.web.ui.with.theme.switching.internationalization.and.command.menu","name":"responsive web ui with theme switching, internationalization, and command menu","description":"Builds a modern podcast web interface using React 19, Tailwind CSS 4, and shadcn/ui components with support for light/dark theme switching (stored in localStorage), multi-language support (English and Chinese via i18n configuration), and a command menu (Cmd+K) for quick navigation. The UI is fully responsive, adapting to mobile, tablet, and desktop viewports. Uses Next.js App Router for server-side rendering and client-side hydration, with Cloudflare Workers as the edge runtime.","intents":["I want a modern, responsive podcast website that works on all devices","I need to support multiple languages (English and Chinese) without separate builds","I want users to customize the theme (light/dark) and have it persist across sessions"],"best_for":["podcast platforms targeting global audiences with multi-language support","teams building responsive web UIs on Cloudflare Workers","developers using React 19 and Tailwind CSS 4 for modern styling"],"limitations":["Theme switching requires client-side JavaScript — no server-side theme detection","Internationalization is hardcoded to English and Chinese — adding new languages requires code changes","Command menu (Cmd+K) is keyboard-only — no touch-friendly alternative for mobile","Tailwind CSS 4 adds ~50KB to CSS bundle (even with purging) — impacts page load time","localStorage is not available in some privacy-focused browsers — theme preference may not persist"],"requires":["React 19 for component rendering","Tailwind CSS 4 for styling","shadcn/ui component library (pre-configured in project)","Next.js 15+ with App Router","i18n configuration for language switching"],"input_types":["user theme preference (light/dark)","user language preference (en/zh)","episode metadata for display"],"output_types":["HTML with theme-aware CSS classes","localized text in selected language","responsive layout for all viewport sizes"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":36,"verified":false,"data_access_risk":"high","permissions":["Cloudflare Workers account with Workflows enabled","Hacker News API access (public, no auth required)","Cloudflare KV namespace for state storage","wrangler CLI 3.0+ for deployment","OpenAI API key or compatible LLM endpoint (Anthropic, local Ollama, etc.)","Minimum 4k context window for article + prompt + dialogue generation","@ai-sdk/openai-compatible library (included in project)","Chinese language model (GPT-4, Claude 3+, or equivalent)","React 19 for component rendering","Cloudflare R2 for image hosting with public CDN access"],"failure_modes":["Cron trigger is fixed to 23:30 UTC — no dynamic scheduling per user timezone","Hacker News API rate limits (~30 requests/min) may throttle if scraping multiple times daily","Workflow execution state persists in Cloudflare Durable Objects — no cross-region failover","LLM generation latency adds 5-15 seconds per article depending on provider and model size","Chinese language quality depends on model training data — may produce awkward phrasing for technical terms","No built-in fact-checking — LLM may hallucinate or misinterpret article content","Token costs scale linearly with article count — no batching or caching of similar summaries","Lightbox requires client-side JavaScript — no server-side rendering","Touch gesture detection is browser-dependent — may not work on all mobile browsers","Image zoom is limited to viewport size — very large images may be cut off","builder identity is not verified yet","artifact is still pending review"],"rank_breakdown":{"adoption":0.5154835875169594,"quality":0.24,"ecosystem":0.6000000000000001,"match_graph":0.25,"freshness":0.35,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.1,"match_graph":0.28,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"pending_review","updated_at":"2026-05-24T12:16:22.062Z","last_scraped_at":"2026-05-03T13:59:55.148Z","last_commit":"2026-02-25T11:48:28Z"},"community":{"stars":2513,"forks":231,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=miantiao-me--hacker-podcast","compare_url":"https://unfragile.ai/compare?artifact=miantiao-me--hacker-podcast"}},"signature":"B8xBDiOw+Bb2VREs6INnjhRAKDYT2HcqQx1djvFFgBxaVUlgII4iAR1Mu2x/ACWEgOu8BwjWnq7oldZzwvWvCQ==","signedAt":"2026-06-20T17:47:37.219Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/miantiao-me--hacker-podcast","artifact":"https://unfragile.ai/miantiao-me--hacker-podcast","verify":"https://unfragile.ai/api/v1/verify?slug=miantiao-me--hacker-podcast","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}