initial commit
This commit is contained in:
135
README.md
Normal file
135
README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# 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
|
||||
|
||||
```markdown
|
||||
---
|
||||
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
|
||||
|
||||
```yaml
|
||||
---
|
||||
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
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development mode
|
||||
npm run dev
|
||||
|
||||
# In another terminal, start Electron
|
||||
npm start
|
||||
```
|
||||
|
||||
### Building
|
||||
|
||||
```bash
|
||||
# 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
|
||||
Reference in New Issue
Block a user