digest-website

Digest Website Generator

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "digest-website" with this command: npx skills add tylersahagun/pm-workspace/tylersahagun-pm-workspace-digest-website

Digest Website Generator

Transform markdown digests into a polished, shareable website inspired by Dia Browser's release notes.

When to Use

  • Running /publish-digest or /publish-digest [date]

  • User asks for "shareable page", "public digest", or "release notes page"

  • Creating a web presence for weekly/daily updates

  • Generating an archive of past issues

Design Inspiration

Reference: https://www.diabrowser.com/release-notes/latest

Key elements:

  • Newspaper/editorial aesthetic - Clean, typographic focus

  • Issue numbering - Sequential issue numbers (No. 001, 002, etc.)

  • Timestamp + location - "January 23, 2026 • San Francisco, USA"

  • Past issues archive - Clickable list of previous issues

  • Minimal color palette - Black, white, subtle accent

  • Large typography - Headlines that command attention

  • Generous whitespace - Editorial breathing room

Site Structure

docs/ ├── index.html # Latest issue (redirects or shows latest) ├── issues/ │ ├── 001.html # Issue 001 (oldest) │ ├── 002.html │ ├── ... │ └── latest.html # Symlink/redirect to newest ├── archive.html # All past issues ├── assets/ │ ├── style.css # Shared styles │ └── logo.svg # AskElephant logo └── CNAME # Custom domain (optional)

Issue Numbering Schema

Track issue numbers in a manifest file:

pm-workspace-docs/status/activity/digest-manifest.json :

{ "$schema": "digest-manifest-v1", "site_title": "AskElephant Weekly", "tagline": "What shipped this week", "location": "San Francisco, USA", "issues": [ { "number": 1, "type": "weekly", "date": "2026-01-10", "week": "W02", "source": "digest-2026-W02.md", "published": "2026-01-10T17:00:00Z", "headline": "Global Chat Goes Live" }, { "number": 2, "type": "weekly", "date": "2026-01-17", "week": "W03", "source": "digest-2026-W03.md", "published": "2026-01-17T17:00:00Z", "headline": "HubSpot Workflow Builder" }, { "number": 3, "type": "weekly", "date": "2026-01-24", "week": "W04", "source": "digest-2026-W04.md", "published": "2026-01-24T17:00:00Z", "headline": "Dialpad Integration Now Live" } ], "current_issue": 3, "app_version_pattern": "2026.W{week}.{patch}" }

HTML Template

Latest Issue Page (index.html )

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>AskElephant Weekly | Latest</title> <meta name="description" content="What shipped this week at AskElephant" /> <meta property="og:title" content="AskElephant Weekly - Issue {{ISSUE_NUMBER}}" /> <meta property="og:description" content="{{HEADLINE}}" /> <meta property="og:image" content="/assets/og-image.png" /> <link rel="stylesheet" href="/assets/style.css" /> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link href="https://fonts.googleapis.com/css2?family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,700;1,6..72,400&#x26;family=Inter:wght@400;500;600&#x26;display=swap" rel="stylesheet" /> </head> <body> <div class="container"> <!-- Masthead --> <header class="masthead"> <div class="masthead-meta"> <time datetime="{{ISO_DATE}}">{{FORMATTED_DATE}}</time> <span class="separator">•</span> <span class="location">San Francisco, USA</span> </div> <div class="masthead-issue"> <span class="issue-label">Issue No.</span> <span class="issue-number">{{ISSUE_NUMBER_PADDED}}</span> </div> </header>

  &#x3C;!-- Title -->
  &#x3C;div class="title-block">
    &#x3C;h1 class="site-title">AskElephant Weekly&#x3C;/h1>
    &#x3C;p class="tagline">What shipped this week&#x3C;/p>
  &#x3C;/div>

  &#x3C;!-- Headline -->
  &#x3C;article class="headline-card">
    &#x3C;h2 class="headline">{{HEADLINE}}&#x3C;/h2>
    &#x3C;p class="headline-description">{{HEADLINE_DESCRIPTION}}&#x3C;/p>
  &#x3C;/article>

  &#x3C;!-- Stats Banner -->
  &#x3C;div class="stats-banner">
    &#x3C;div class="stat">
      &#x3C;span class="stat-value">{{FEATURES_COUNT}}&#x3C;/span>
      &#x3C;span class="stat-label">New Features&#x3C;/span>
    &#x3C;/div>
    &#x3C;div class="stat">
      &#x3C;span class="stat-value">{{IMPROVEMENTS_COUNT}}&#x3C;/span>
      &#x3C;span class="stat-label">Improvements&#x3C;/span>
    &#x3C;/div>
    &#x3C;div class="stat">
      &#x3C;span class="stat-value">{{BUGS_COUNT}}&#x3C;/span>
      &#x3C;span class="stat-label">Bugs Fixed&#x3C;/span>
    &#x3C;/div>
  &#x3C;/div>

  &#x3C;!-- Content Sections -->
  &#x3C;main class="content">
    {{#if FEATURES}}
    &#x3C;section class="section">
      &#x3C;h3 class="section-title">New Features&#x3C;/h3>
      &#x3C;ul class="feature-list">
        {{#each FEATURES}}
        &#x3C;li>
          &#x3C;strong>{{this.title}}&#x3C;/strong>
          {{#if this.description}}&#x3C;span class="item-desc"
            >— {{this.description}}&#x3C;/span
          >{{/if}}
        &#x3C;/li>
        {{/each}}
      &#x3C;/ul>
    &#x3C;/section>
    {{/if}} {{#if IMPROVEMENTS}}
    &#x3C;section class="section">
      &#x3C;h3 class="section-title">Improvements&#x3C;/h3>
      &#x3C;ul class="item-list">
        {{#each IMPROVEMENTS}}
        &#x3C;li>{{this}}&#x3C;/li>
        {{/each}}
      &#x3C;/ul>
    &#x3C;/section>
    {{/if}} {{#if BUGS_COUNT}}
    &#x3C;section class="section">
      &#x3C;h3 class="section-title">Bugs Fixed&#x3C;/h3>
      &#x3C;p class="bugs-summary">{{BUGS_COUNT}} bugs squashed this week&#x3C;/p>
    &#x3C;/section>
    {{/if}} {{#if COMING_NEXT}}
    &#x3C;section class="section">
      &#x3C;h3 class="section-title">Coming Next&#x3C;/h3>
      &#x3C;ul class="item-list">
        {{#each COMING_NEXT}}
        &#x3C;li>{{this}}&#x3C;/li>
        {{/each}}
      &#x3C;/ul>
    &#x3C;/section>
    {{/if}}
  &#x3C;/main>

  &#x3C;!-- Past Issues -->
  &#x3C;aside class="past-issues">
    &#x3C;h3>Past Issues&#x3C;/h3>
    &#x3C;ul class="archive-list">
      {{#each PAST_ISSUES}}
      &#x3C;li>
        &#x3C;a href="/issues/{{this.number}}.html">
          &#x3C;span class="archive-date">{{this.short_date}}&#x3C;/span>
          &#x3C;span class="archive-number">No. {{this.number_padded}}&#x3C;/span>
          &#x3C;span class="archive-headline">{{this.headline}}&#x3C;/span>
        &#x3C;/a>
      &#x3C;/li>
      {{/each}}
    &#x3C;/ul>
    &#x3C;a href="/archive.html" class="view-all">View All Issues →&#x3C;/a>
  &#x3C;/aside>

  &#x3C;!-- Footer -->
  &#x3C;footer class="footer">
    &#x3C;div class="footer-logo">
      &#x3C;img
        src="/assets/logo.svg"
        alt="AskElephant"
        width="24"
        height="24"
      />
      &#x3C;span>AskElephant&#x3C;/span>
    &#x3C;/div>
    &#x3C;p class="footer-tagline">Meeting intelligence for revenue teams&#x3C;/p>
  &#x3C;/footer>
&#x3C;/div>

</body> </html>

Stylesheet (assets/style.css )

/* AskElephant Weekly - Newspaper Style */

:root { --color-bg: #fafafa; --color-paper: #ffffff; --color-ink: #1a1a1a; --color-ink-light: #6b7280; --color-accent: #d4ff00; --color-border: #e5e7eb;

--font-serif: "Newsreader", Georgia, serif; --font-sans: "Inter", -apple-system, sans-serif;

--space-xs: 8px; --space-sm: 16px; --space-md: 24px; --space-lg: 48px; --space-xl: 64px; }

  • { margin: 0; padding: 0; box-sizing: border-box; }

body { font-family: var(--font-sans); background: var(--color-bg); color: var(--color-ink); line-height: 1.6; -webkit-font-smoothing: antialiased; }

.container { max-width: 680px; margin: 0 auto; padding: var(--space-lg) var(--space-md); }

/* Masthead */ .masthead { display: flex; justify-content: space-between; align-items: flex-start; padding-bottom: var(--space-md); border-bottom: 1px solid var(--color-border); margin-bottom: var(--space-md); }

.masthead-meta { font-size: 12px; color: var(--color-ink-light); text-transform: uppercase; letter-spacing: 0.5px; }

.masthead-meta .separator { margin: 0 8px; }

.masthead-issue { text-align: right; }

.issue-label { display: block; font-size: 10px; color: var(--color-ink-light); text-transform: uppercase; letter-spacing: 1px; }

.issue-number { font-family: var(--font-serif); font-size: 14px; font-weight: 400; letter-spacing: 2px; }

/* Title Block */ .title-block { text-align: center; padding: var(--space-lg) 0; border-bottom: 2px solid var(--color-ink); }

.site-title { font-family: var(--font-serif); font-size: 42px; font-weight: 700; letter-spacing: -1px; margin-bottom: var(--space-xs); }

.tagline { font-size: 14px; color: var(--color-ink-light); font-style: italic; }

/* Headline Card */ .headline-card { background: var(--color-paper); padding: var(--space-lg); margin: var(--space-lg) 0; border: 1px solid var(--color-border); text-align: center; }

.headline { font-family: var(--font-serif); font-size: 28px; font-weight: 700; line-height: 1.3; margin-bottom: var(--space-sm); }

.headline-description { font-size: 16px; color: var(--color-ink-light); max-width: 500px; margin: 0 auto; }

/* Stats Banner */ .stats-banner { display: flex; justify-content: center; gap: var(--space-lg); padding: var(--space-md) 0; border-top: 1px solid var(--color-border); border-bottom: 1px solid var(--color-border); margin-bottom: var(--space-lg); }

.stat { text-align: center; }

.stat-value { display: block; font-family: var(--font-serif); font-size: 36px; font-weight: 700; line-height: 1; }

.stat-label { font-size: 11px; color: var(--color-ink-light); text-transform: uppercase; letter-spacing: 0.5px; }

/* Content Sections */ .content { margin-bottom: var(--space-xl); }

.section { margin-bottom: var(--space-lg); }

.section-title { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; color: var(--color-ink-light); margin-bottom: var(--space-sm); padding-bottom: var(--space-xs); border-bottom: 1px solid var(--color-border); }

.feature-list, .item-list { list-style: none; }

.feature-list li, .item-list li { padding: var(--space-sm) 0; border-bottom: 1px solid var(--color-border); font-size: 15px; }

.feature-list li:last-child, .item-list li:last-child { border-bottom: none; }

.item-desc { color: var(--color-ink-light); }

.bugs-summary { font-style: italic; color: var(--color-ink-light); }

/* Past Issues */ .past-issues { background: var(--color-paper); padding: var(--space-md); border: 1px solid var(--color-border); margin-bottom: var(--space-lg); }

.past-issues h3 { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 1px; margin-bottom: var(--space-sm); }

.archive-list { list-style: none; }

.archive-list li { border-bottom: 1px solid var(--color-border); }

.archive-list li:last-child { border-bottom: none; }

.archive-list a { display: flex; align-items: baseline; gap: var(--space-sm); padding: var(--space-sm) 0; text-decoration: none; color: var(--color-ink); transition: opacity 0.2s; }

.archive-list a:hover { opacity: 0.7; }

.archive-date { font-size: 12px; color: var(--color-ink-light); min-width: 80px; }

.archive-number { font-size: 11px; color: var(--color-ink-light); min-width: 60px; }

.archive-headline { font-size: 14px; flex: 1; }

.view-all { display: block; text-align: center; padding-top: var(--space-sm); font-size: 13px; color: var(--color-ink-light); text-decoration: none; }

.view-all:hover { color: var(--color-ink); }

/* Footer */ .footer { text-align: center; padding-top: var(--space-lg); border-top: 1px solid var(--color-border); }

.footer-logo { display: flex; align-items: center; justify-content: center; gap: var(--space-xs); font-weight: 600; margin-bottom: var(--space-xs); }

.footer-tagline { font-size: 13px; color: var(--color-ink-light); }

/* Responsive */ @media (max-width: 600px) { .container { padding: var(--space-md) var(--space-sm); }

.site-title { font-size: 32px; }

.headline { font-size: 22px; }

.stats-banner { gap: var(--space-md); }

.stat-value { font-size: 28px; } }

Generation Procedure

Step 1: Load or Create Manifest

Check for digest-manifest.json :

  • If exists, load current issue number

  • If not, create with issue number 1

Step 2: Parse Markdown Digest

Extract from source digest:

  • Date and week number

  • Headline text and description

  • Features list with titles/descriptions

  • Improvements list

  • Bugs count

  • Coming next items

Step 3: Generate HTML

  • Increment issue number

  • Fill HTML template with extracted data

  • Generate past issues list (last 5)

  • Save to docs/issues/{number}.html

  • Update docs/index.html to show latest

Step 4: Update Manifest

Add new issue to manifest:

{ "number": 4, "type": "weekly", "date": "2026-01-24", "week": "W04", "source": "digest-2026-W04.md", "published": "2026-01-24T17:00:00Z", "headline": "Dialpad Integration Now Live" }

Step 5: Commit and Deploy

If using GitHub Pages:

git add docs/ git commit -m "Publish digest issue #{{NUMBER}}" git push

Command Options

Command Description

/publish-digest

Publish most recent digest

/publish-digest YYYY-WXX

Publish specific weekly digest

/publish-digest YYYY-MM-DD

Publish specific daily digest

/publish-digest --preview

Generate but don't commit

/publish-digest --rebuild

Rebuild all issues from manifest

Hosting Options

Option 1: GitHub Pages (Recommended)

  • Enable GitHub Pages on docs/ folder

  • Optionally set custom domain (e.g., weekly.askelephant.com )

  • Commits to docs/ auto-deploy

Setup:

In pm-workspace repo settings:

Pages → Source → Deploy from branch → main → /docs

Option 2: Netlify/Vercel

Drop-in deployment from docs/ folder with custom domain support.

Option 3: Internal/Private

Host on internal server if digests shouldn't be public.

File Locations

File Location

Generated site pm-workspace-docs/docs/ (or root docs/ )

Manifest pm-workspace-docs/status/activity/digest-manifest.json

Source digests pm-workspace-docs/status/activity/digest/digest-*.md

Integration

With Activity Reporter

After generating a digest with /eod --digest or /eow --digest :

Digest saved to digest-2026-W04.md

Would you like to publish this to the website? Run /publish-digest to create issue #4.

With Visual Digest

The website can embed or link to visual assets:

  • OG image for social sharing

  • Header graphics

Example Output

For digest-2026-W04.md → Issue #3:

URL: https://weekly.askelephant.com/ or https://weekly.askelephant.com/issues/003.html

Masthead:

January 24, 2026 • San Francisco, USA Issue No. 003

Title:

     AskElephant Weekly
     What shipped this week

Content:

┌────────────────────────────────────────────┐ │ │ │ Dialpad Integration Now Live │ │ │ │ Customers using Dialpad can now │ │ connect their telephony directly │ │ to AskElephant │ │ │ └────────────────────────────────────────────┘

    21              6              14
New Features   Improvements    Bugs Fixed

Customization

Adjust Design

Edit assets/style.css to change:

  • Colors (update CSS variables)

  • Typography (change font imports)

  • Layout (adjust spacing, max-width)

Add Branding

Replace in assets/ :

  • logo.svg

  • Your logo

  • og-image.png

  • Social preview image (1200x630px)

  • favicon.ico

  • Browser tab icon

Change Frequency

Modify manifest schema for daily vs weekly preference:

{ "publish_frequency": "weekly", // or "daily" "publish_day": "friday", // for weekly "publish_time": "17:00" // local time }

Error Handling

No Digest Found

⚠️ No digest found for the specified date.

Available digests:

  • digest-2026-W04.md (January 20-24)
  • digest-2026-W03.md (January 13-17)

Run /eow --digest to generate a new weekly digest first.

Manifest Missing

ℹ️ No digest manifest found. Creating new manifest.

This will be Issue #1. Continue? [Y/n]

Already Published

⚠️ digest-2026-W04.md was already published as Issue #3.

Options:

  • /publish-digest --force to republish (updates existing)
  • /publish-digest 2026-W05 to publish a different week

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

slack-block-kit

No summary provided by upstream source.

Repository SourceNeeds Review
General

remotion-video

No summary provided by upstream source.

Repository SourceNeeds Review
General

prd-writer

No summary provided by upstream source.

Repository SourceNeeds Review
General

skylar-start-here

No summary provided by upstream source.

Repository SourceNeeds Review