7e4457c15d782f44d04014454c1ae1a295171f89
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.metasidecar 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
- Create a Turso database at https://turso.tech
- Get your database URL and auth token
- Go to Settings in the app
- Enter your Turso credentials
- Click "Enable Sync"
Auto-sync runs every 5 minutes when configured.
License
MIT
Languages
TypeScript
94.8%
CSS
4.6%
Liquid
0.3%
JavaScript
0.2%