Skip to content

obsidian time#48

Draft
jackharrhy wants to merge 15 commits intomainfrom
obsidian-time
Draft

obsidian time#48
jackharrhy wants to merge 15 commits intomainfrom
obsidian-time

Conversation

@jackharrhy
Copy link
Copy Markdown
Owner

  • feat: replace logseq-based site with obsidian-based foundation
  • feat: port all components, layout, and page system from old site
  • feat: port RSS feeds, tools pages, and infrastructure
  • fix: graceful handling when vault is absent, use mime for asset types
  • ignore vault folder when symlink is there

Remove the old site/ directory with its Python (garden.py) pipeline that
required a running Logseq instance. Replace with the new Obsidian-based
Astro site that reads .md files directly from an Obsidian vault via
custom remark/rehype plugins.

- Remove garden.py, pyproject.toml, uv.lock, .python-version
- Remove site/ (old Logseq-based Astro project)
- Promote tmp/new-website to repo root
- Clean up dead files (quartz-plugins, superseded plugins, test harnesses)
- Make vault path configurable via GARDEN_VAULT_PATH env var
- Add site URL to astro config
- Update .gitignore for new structure
- Preserve static assets (favicon, quake-bg, RSS stylesheets)
- Port full Layout.astro with htmx, GoatCounter, view transitions, OG tags,
  custom fonts, Phosphor Icons, and RSS link alternates
- Port Page.astro component with custom layouts (quake, terminal),
  breadcrumb navigation, and component injection
- Port all UI components: Mug (picoCAD 3D), Feed, FeedTree, Project,
  NowPlaying (htmx/Last.fm), Spinner
- Port feeds.ts (linkblog/devblog post querying and tree building)
- Port utils.ts (slugify, CORS, RSS image helpers)
- Simplify page routing: index uses Page component, catch-all handles
  all public garden entries including about/projects/now
- Install htmx.org, @astrojs/rss, mime, cheerio dependencies
- Add RSS endpoints for linkblog, devblog, and posts with 8AM NST embargo
- Port Last.fm now-playing endpoint and page
- Port YouTube thumbnail fetcher and tweet archiver tools
- Update Dockerfile for repo-root site structure
- Update compose.yml env_file path
- Simplify justfile (remove garden.py/Python references)
- Expand .env.dist with all required env vars
- index.astro: show placeholder when home entry not in vault
- Page.astro: use Astro.rewrite for 404 instead of throw
- asset endpoint: use mime package for content-type detection
- asset endpoint: make vault assets path configurable via env var
- tsconfig: add node types
- .env.dist: document GARDEN_VAULT_ASSETS_PATH
- Remove dist/ from repo (build artifact)
Adds a new remark transform that converts ```component``` fenced code
blocks in Obsidian markdown files into custom HTML elements. Astro's
Content component then maps these elements to real Astro components.

Syntax:
  ```component
  Feed
  source: linkblog
  limit: 5
  ```

Emits: <x-feed source="linkblog" limit="5"></x-feed>
Mapped in Page.astro: { "x-feed": Feed, "x-mug": Mug, ... }

Also:
- Add Letterbird.astro component (contact form embed)
- Add resolveOgImage() to utils to strip Obsidian wikilink syntax
  from og-image frontmatter values (e.g. ![[file.png]])
- Apply resolveOgImage in Page.astro and RSS endpoints
- Remove debug appendFileSync from rehype-obsidian.mjs
- Rewrite vault pages (Home, About, Now, Linkblog, Devblog, Projects)
  from Logseq block format to clean Obsidian markdown with component
  blocks — About and Now are now plain paragraphs, no more `- ` bullets
- Move all PicoCADViewer initialization inside astro:page-load so the
  canvas element is guaranteed to exist in the DOM before we touch it
- Rename canvas id from 'canvas' to 'mug-canvas' to avoid collision
  with any other canvas elements on the page
- Viewer instance is lazily created once and reused across navigations
  (transition:persist keeps the DOM node alive)
The components prop on Astro's <Content /> only works with MDX, not plain
.md files. For pages with ```component blocks, we now:

1. Parse the raw markdown body and split it into interleaved prose +
   component segments using splitIntoSegments()
2. Run each prose segment through the full unified/remark/rehype pipeline
   (remarkObsidian + rehypeObsidian) to get properly transformed HTML
3. Render each segment: prose as <Fragment set:html={...} />, component
   blocks as real Astro components (Mug, Feed, FeedTree, Project, etc.)

Pages without any component blocks continue using Astro's native render()
for better performance.

Also removes dead AstroContainer/renderEntry code from earlier attempt.
- feeds.ts: use getCollection filter fn so only public entries are ever
  fetched for linkblog and devblog (removes the need to filter afterwards)
- Page.astro: 404 if entry exists but is not public; only link breadcrumb
  segments to entries that are public
- Feed.astro: fix href missing leading slash; show description after date link
…wn plugins

- Replace npm with pnpm: remove package-lock.json, add pnpm-lock.yaml, update
  Dockerfile to use corepack + pnpm, upgrade @astrojs/node and astro to latest
- Upgrade Tailwind v3 → v4: swap @astrojs/tailwind integration for @tailwindcss/vite
  plugin, add src/styles/global.css, update tailwind.config.mjs content paths
- Rewrite remark-obsidian: add pass for tab-indented continuation lines (Obsidian
  nesting), replace raw HTML nodes with proper MDAST hast data for YouTube iframes
  and video/audio embeds so they survive remark-rehype correctly
- Fix rehype-obsidian: handle raw and block-level element nodes (video, audio, iframe)
  to avoid nesting block elements inside <p>
- Migrate content config from src/content/config.ts (legacy) to src/content.config.ts
  using Astro v6 glob loader API
- Add src/pages/404.astro with garden-entry fallback
- Add scripts/delogseq.mjs and scripts/retab-linkblog.mjs utilities with tests
- Add docs/plans for linkblog tab-grouping design and implementation
- Convert /debug to SSR; return JSON when Accept: application/json is sent
- Add /debug/compare?path=... with two iframes (local vs prod) and a path
  picker populated from the JSON endpoint
- Skip list-to-paragraph flattening in rehypeObsidian when parent is a
  blockquote, preserving genuine ol/ul inside quoted content
- Add watch-lib integration to astro.config.mjs so changes to lib/ trigger
  a dev server restart, working around Astro not tracking config dependencies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant