Lossless Changelog
component

Monorepo Foundation: Scaffold memopop-ai with Astro Site and SvelteKit App

Established the production-grade memopop-ai monorepo with Bun workspaces, Astro marketing site, SvelteKit web app skeleton, and shared Tailwind configuration.

Michael StatonMusic Editoraugmented with Claude Code with Claude Opus 4.5

Changelog - 2025-12-27 (#1)

MemoPop AI: Monorepo Foundation

Overview

Created the lossless-group/memopop-ai public repository and established a production-grade monorepo structure using Bun workspaces. This provides the foundation for three apps working together: a marketing site, a web application, and an AI agent orchestrator.

Key deliverables:

  • Monorepo scaffold with Bun workspaces (no Turborepo needed yet)

  • Astro marketing site with full landing page ported from GitHub Pages

  • SvelteKit web app skeleton with Svelte 5 runes syntax

  • Shared Tailwind config as a workspace package


Architecture Decisions

These decisions were documented in context-v/Vision-for-Production-Grade-Memopop-Monorepo.md:

DecisionChoiceRationale
Package managerBun + Bun workspacesFast, modern, native workspace support. Turborepo as escape hatch if builds slow down.
Frontend (marketing)AstroBest static site perf, content collections, no React
Frontend (app)SvelteKit + Svelte 5Modern reactivity with runes, no React patterns
StylingShared TailwindSingle config in packages/shared-styles/, both apps consume
DeploymentVercelExisting paid account, great Astro + SvelteKit support
AuthSuperTokens on RailwayOpen source, self-hosted, full control
DatabaseBaserow on RailwayOpen source, self-hosted, easy data management
ChangelogDistributed per appEach app has own changelog, aggregated via GitHub raw API

Monorepo Structure

memopop-ai/
├── apps/
│   ├── memopop-site/              # Astro - Marketing & SEO
│   │   ├── src/
│   │   │   ├── layouts/
│   │   │   │   └── BaseLayout.astro
│   │   │   └── pages/
│   │   │       └── index.astro    # Full landing page
│   │   └── changelog/             # Site-specific changes
│   │
│   ├── memopop-web-app/           # SvelteKit + Svelte 5
│   │   ├── src/
│   │   │   └── routes/
│   │   │       ├── +page.svelte   # Svelte 5 runes demo
│   │   │       └── +layout.svelte
│   │   └── changelog/             # Web app changes
│   │
│   └── memopop-agent-orchestrator/ # Python (to be migrated)
│       └── changelog/
│
├── packages/
│   └── shared-styles/             # @memopop/shared-styles
│       ├── tailwind.config.js     # Shared Tailwind config
│       ├── tokens.js              # Design tokens for non-Tailwind use
│       └── globals.css            # CSS custom properties + base styles
│
├── package.json                   # Bun workspaces config
└── README.md

Landing Page Port

Ported the full MemoPop landing page from the GitHub Pages docs/ folder to Astro:

Sections Implemented

  1. Navigation - Sticky header with mobile hamburger menu

  2. Hero - Headline, subheadline, CTAs, animated memo preview

  3. Problem - Pain point validation with bullet list

  4. How It Works - 3-step process cards

  5. Features - 7 feature cards including "Voice of the Firm" highlight

  6. Output Showcase - Dark mode memo mockup with citation callout

  7. Agent Architecture - Flow diagram of 5 key agents

  8. Pricing - 3-tier pricing cards (Starter/Pro/Enterprise)

  9. FAQ - 6-item accordion using native <details>

  10. Final CTA - Gradient background with action button

  11. Footer - Brand, links, social icons

Styling Approach

  • CSS Variables in BaseLayout.astro for theming

  • Scoped styles in index.astro for page-specific CSS

  • Mobile-first responsive design

  • No Tailwind utility classes yet - CSS ported directly for speed


Shared Styles Package

Created @memopop/shared-styles as a workspace package:

JS
// packages/shared-styles/tailwind.config.js
export default {
  theme: {
    extend: {
      colors: {
        primary: '#1a3a52',
        secondary: '#1dd3d3',
        accent: '#f59e0b',
        // ... full palette
      },
      fontFamily: {
        sans: ['Inter', 'system-ui', 'sans-serif'],
        mono: ['JetBrains Mono', 'monospace'],
      },
    },
  },
};

Both apps reference via workspace protocol:

JSON
{
  "dependencies": {
    "@memopop/shared-styles": "workspace:*"
  }
}

SvelteKit App Skeleton

Initialized with Svelte 5 runes syntax:

SVELTE
<script lang="ts">
  // Svelte 5 runes
  let count = $state(0);

  function increment() {
    count++;
  }
</script>

<button onclick={increment}>
  Count: {count}
</button>

Configured with:

  • Vercel adapter for deployment

  • TypeScript strict mode

  • Workspace dependency on @memopop/shared-styles


Commands

BASH
# Install all dependencies
bun install

# Run marketing site
bun run dev:site

# Run web app
bun run dev:app

# Build both
bun run build

Next Steps

  1. Decide domain structure (subdomains vs paths)

  2. Set up Vercel project and deploy

  3. Add changelog content collection to Astro

  4. Implement changelog UI with view toggling (Timeline/Cards/Releases)

  5. Migrate agent orchestrator code from investment-memo-orchestrator

  6. Deploy SuperTokens and Baserow on Railway


Commits

HashMessage
c7e87d9scaffold(monorepo): Initialize Bun workspace with Astro site and SvelteKit app
87311b6feat(site): Port landing page from GitHub Pages to Astro

This changelog documents the initial foundation of the MemoPop AI monorepo.