2026-02-10 12:36:20 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 13:14:20 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 17:16:34 +01:00
2026-02-10 11:04:44 +01:00
2026-02-10 16:38:20 +01:00

Blogging Desktop Server (bDS)

A desktop blogging application with offline-first capabilities and cloud sync via Turso/LibSQL.

Features

  • Offline-First: All data is stored locally in SQLite, works without internet
  • Cloud Sync: Synchronize with Turso (LibSQL) for multi-device access
  • VS Code-Inspired UI: Familiar, clean interface with activity bar, sidebar, and editor
  • Markdown Posts: Write blog posts in Markdown with YAML frontmatter
  • Media Management: Import and manage images with metadata sidecar files
  • Clean Architecture: Engine classes handle business logic, UI is purely presentational

Architecture

src/
├── main/                  # Electron main process
│   ├── database/         # Drizzle ORM schema and connection
│   ├── engine/           # Business logic engines
│   │   ├── PostEngine    # Post CRUD, file operations
│   │   ├── MediaEngine   # Media import/management
│   │   ├── SyncEngine    # Turso sync logic
│   │   └── TaskManager   # Async task handling
│   ├── ipc/              # IPC handlers for renderer communication
│   └── main.ts           # App entry point
│
└── renderer/             # Electron renderer process (React)
    ├── components/       # UI components (VS Code style)
    ├── store/            # Zustand state management
    └── styles/           # Global CSS variables

Data Storage

All user data is stored in the application's user data folder:

  • Database: {userData}/bds.db - SQLite database with post/media metadata
  • Posts: {userData}/posts/*.md - Markdown files with YAML frontmatter
  • Media: {userData}/media/ - Image files with .meta sidecar files

Post Format

---
id: uuid-here
title: "My Blog Post"
slug: my-blog-post
status: draft
author: John Doe
createdAt: 2024-01-15T10:30:00.000Z
updatedAt: 2024-01-15T10:30:00.000Z
tags: ["javascript", "tutorial"]
categories: ["development"]
---

# My Blog Post

Your markdown content here...

Media Sidecar Format

---
id: uuid-here
originalName: "photo.jpg"
mimeType: image/jpeg
size: 102400
width: 1920
height: 1080
alt: "A beautiful sunset"
caption: "Sunset over the mountains"
createdAt: 2024-01-15T10:30:00.000Z
updatedAt: 2024-01-15T10:30:00.000Z
tags: ["nature", "sunset"]
---

Development

Prerequisites

  • Node.js 18+
  • npm or yarn

Setup

# Install dependencies
npm install

# Start development mode
npm run dev

# In another terminal, start Electron
npm start

Building

# Build for production
npm run build

# Package for distribution (uses electron-builder)
npx electron-builder

Keyboard Shortcuts

Shortcut Action
Ctrl+N New Post
Ctrl+S Save
Ctrl+B Toggle Sidebar
Ctrl+J Toggle Panel
Ctrl+1 View Posts
Ctrl+2 View Media
Ctrl+Shift+P Publish Selected
Ctrl+Shift+S Sync Now

Cloud Sync Setup

  1. Create a Turso database at https://turso.tech
  2. Get your database URL and auth token
  3. Go to Settings in the app
  4. Enter your Turso credentials
  5. Click "Enable Sync"

Auto-sync runs every 5 minutes when configured.

License

MIT

Description
Blogging Desktop Server - Typescript version
Readme MIT 5.9 MiB
Languages
TypeScript 94.8%
CSS 4.6%
Liquid 0.3%
JavaScript 0.2%