2026-06-10 21:24:46 +10:00
2026-06-08 21:15:37 +10:00
2026-06-08 17:15:43 +10:00
2026-06-08 17:15:43 +10:00
2026-06-10 21:23:32 +10:00
2026-06-10 21:23:32 +10:00
📝 readme
2026-06-10 21:24:46 +10:00
2026-06-08 17:15:43 +10:00
2026-06-08 17:15:43 +10:00
2026-06-08 17:15:43 +10:00

Borges

Borges

A desktop app for flash fiction writers. Write, analyse, and track submissions — all in one place.

Built with Electron, React, TypeScript, and CodeMirror. AI features run on Claude (default) or any OpenAI-compatible provider.


Features

Editor

  • Markdown editor powered by CodeMirror 6
  • Live word count with a configurable target bar
  • Auto-save every 10 seconds; manual save with Cmd+S
  • Revision history (up to 50 snapshots per story)
  • Focus mode hides all panels for distraction-free writing
  • Dark and light themes; adjustable font size

AI Analysis

Four one-click analysis modes, each tuned for flash fiction craft:

Mode What it does
Compression Flags redundant phrases, passive constructions, and over-explained beats with inline suggestions
Ending Prose critique of the final paragraph — weight, earn, and closure
Tone Maps the dominant register and flags every sentence that drifts from it
Market fit Evaluates how well the story suits the selected submission market

Results appear as annotated passages in the editor. Each annotation can be applied or dismissed individually. A free-form Chat panel lets you ask follow-up questions about the story.

Analysis can optionally include:

  • Collection context — a freeform brief you write about the collection as a whole
  • Market brief — word-count range, genres, and notes pulled from the selected market

Dashboard

  • Prompts hero — generates a single evocative one-sentence writing prompt on demand
  • Writing stats — session history, words written per day, WPM

Submission tracker

  • Markets — store name, URL, word-count limits, simultaneous-submission policy, genres, and notes; mark active/inactive
  • Stories — log each submission, track status (pending, pending-revision, accepted, rejected, withdrawn), and view history per story

Getting started

Requirements

  • Node.js 20+
  • An Anthropic API key (or an OpenAI-compatible endpoint)

Install and run

npm install
npm run dev

Configure

Open Borges → Preferences (or Cmd+,) on first launch and set:

  • API key — your Anthropic key, or the key for your custom provider
  • Collection folder — where your .md story files live (defaults to ~/Documents/borges-collection)

Settings are stored in ~/.borges/config.json.

Build a distributable

npm run package          # macOS universal DMG
npm run package:win      # Windows NSIS installer
npm run package:linux    # Linux AppImage

Custom AI provider

Borges defaults to Claude (claude-sonnet-4-6 for analysis, claude-haiku-4-5 for prompts). To use a different provider add an ai block to ~/.borges/config.json:

{
  "ai": {
    "baseURL": "https://your-openai-compatible-endpoint/v1",
    "model": "your-model-name",
    "promptModel": "your-fast-model-name"
  }
}

When baseURL is set, Borges switches to the OpenAI-compatible client. The same apiKey field is used.


Project structure

src/
  main/
    index.ts          — Electron main process, window setup
    ipcHandlers.ts    — IPC bridge between renderer and filesystem/AI
    aiService.ts      — Streaming AI calls (Anthropic + OpenAI-compatible)
    fileSystem.ts     — Story CRUD, markets, submissions, revisions, telemetry
    globalConfig.ts   — ~/.borges/config.json read/write
  preload/
    index.ts          — Exposes window.api to renderer via contextBridge
  renderer/
    components/       — React UI (Editor, Sidebar, Dashboard, AIChat, etc.)
    store/
      borgesStore.ts  — Zustand global state
    types/
      borges.ts       — Shared TypeScript types

Data layout (per collection)

Each collection folder contains your .md story files plus a .borges/ directory:

~/Documents/borges-collection/
  my-story.md
  another-story.md
  .borges/
    config.json       — per-story metadata + collection context
    order.json        — sidebar sort order
    session.json      — last open story + chat history
    markets.json
    submissions.json
    telemetry.json
    revisions/
      my-story/
        <timestamp>_<id>.json

Scripts

Command Description
npm run dev Start in development mode with hot-reload
npm run build Compile renderer, main, and preload
npm run typecheck Type-check all TypeScript
npm run package Build + package macOS DMG
npm run package:win Build + package Windows installer
npm run package:linux Build + package Linux AppImage

Tech stack

  • Electron 33 + electron-vite — desktop shell and build tooling
  • React 18 + Zustand — UI and state management
  • CodeMirror 6 — markdown editor
  • @anthropic-ai/sdk + openai — AI streaming
  • TypeScript 5, Vite 5
Description
Short story writing and management application for desktops.
Readme 4.7 MiB
Languages
TypeScript 79.2%
CSS 18.3%
JavaScript 2.3%
HTML 0.2%