PhotoMapAI
A modern image browser and search tool that uses AI to generate a "semantic map" of your collection.
Write, collaborate and publish from the web, CLI or API. Explore original stories from independent writers, developers and teams.
MediaJavaScript · CSSGitHub @elixpoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Open-source collaborative blogging platform with real-time editing, multi-tenant publications, Markdown, SEO, API and CLI automation—built with Next.js and Cloudflare.
Loading the full README.
Read the full README ↗A modern blogging platform with a rich block editor, AI writing assistant, real-time collaboration, and organizations — all on the edge.
Website · Discussions · Elixpo · Chapter
LixBlogs (also called Elixpo Blogs) is an open-source publishing platform designed for creators, developers, and teams. It gives you a beautiful writing experience with powerful tools built right in — a rich block editor, an AI writing assistant, real-time collaboration, and organizations — all deployed on Cloudflare's edge and hosted at blogs.elixpo.com.
It supports personal publishing, organization publications, and collaborative editing. Availability, account requirements, and operated-service limits are documented by the hosted service rather than promised by this README.
This is a monorepo: alongside the platform it ships @elixpo/lixeditor (the
editor on npm) and the LixEditor VS Code extension. It is part of the wider
Elixpo ecosystem.
| Feature | Description | |
|---|---|---|
| :sparkles: | AI Writing Assistant | Press Space on an empty line — generate text, images, and get inline suggestions |
| :jigsaw: | Rich Block Editor | 20+ block types — code, math equations, diagrams, embeds, tables, and more |
| :busts_in_silhouette: | Real-Time Collaboration | Invite co-authors and edit together with live cursors and presence |
| :office: | Organizations & Teams | Create orgs, assign roles, organize content into collections |
| :cloud: | Auto-Save & Cloud Sync | Drafts save locally and sync to the cloud — never lose a word |
| :art: | Themes & Customization | Light & dark modes, custom page colors, cover images, page emojis |
| :link: | Link Previews | Hover any link to see a rich OG preview card with title, image, favicon |
| :page_facing_up: | Sub-Pages | Nest pages inside your blog for structured, multi-page content |
| :framed_picture: | Media Uploads | Drag & drop images, auto-compressed to WebP, with platform or creator-owned Cloudinary storage |
| :bookmark_tabs: | Library & Bookmarks | Save posts, organize into collections, track reading history |
LixBlogs is an active core service of the Elixpo open-source project foundry. Its platform, editor package, publishing CLI, and extension are developed in this repository. The canonical directory of current Projects, Research, and Services lives at elixpo.com; this README does not copy that directory because lifecycle information changes independently.
@elixpo/lixeditor — Use Our Editor AnywhereThe editor that powers LixBlogs is available as a standalone npm package. Drop it into any React or Next.js app to get a fully-featured WYSIWYG editor with equations, diagrams, code highlighting, and more.
npm install @elixpo/lixeditor @blocknote/core @blocknote/react @blocknote/mantine
import { LixEditor, LixPreview, LixThemeProvider } from '@elixpo/lixeditor';
import '@blocknote/core/fonts/inter.css';
import '@blocknote/mantine/style.css';
import '@elixpo/lixeditor/styles';
function App() {
const [blocks, setBlocks] = useState(null);
return (
<LixThemeProvider defaultTheme="dark">
<LixEditor
initialContent={blocks}
onChange={(editor) => setBlocks(editor.getBlocks())}
features={{ equations: true, mermaid: true, codeHighlighting: true }}
placeholder="Start writing..."
/>
<LixPreview blocks={blocks} />
</LixThemeProvider>
);
}
| Feature | Default | Description |
|---|---|---|
equations | :white_check_mark: | Block & inline LaTeX via KaTeX |
mermaid | :white_check_mark: | Mermaid diagrams (flowcharts, sequence, git graphs) |
codeHighlighting | :white_check_mark: | Shiki syntax highlighting — 30+ languages |
tableOfContents | :white_check_mark: | Auto-generated TOC from headings |
images | :white_check_mark: | Upload, embed URL, paste, drag & drop |
dates | :white_check_mark: | Inline date picker chips |
linkPreview | :white_check_mark: | OG metadata tooltip on link hover |
markdownLinks | :white_check_mark: | Auto-convert [text](url) and  |
Every feature is toggleable. Override CSS variables to match your brand:
:root {
--lix-accent: #e040fb;
--lix-bg-app: #fafafa;
--lix-font-body: 'Inter', sans-serif;
}
:point_right: Full documentation →
Write .lixeditor documents with a rich WYSIWYG editor — right inside VS Code.
| Feature | |
|---|---|
| :writing_hand: | Rich block editor — headings, lists, tables, checklists |
| :art: | Syntax-highlighted code blocks (25+ languages via Shiki) |
| :link: | Smart links — auto-convert [text](url), hover preview |
| :framed_picture: | Image blocks — upload, embed URL, paste, drag & drop |
| :calendar: | Date stamps — Ctrl+D to insert |
| :zap: | Slash commands — type / to insert any block |
| :floppy_disk: | Auto-save + manual save + Markdown export |
| :art: | Adapts to your VS Code theme (light/dark) |
1. Install the extension from the VS Code Marketplace
2. Create a file: notes.lixeditor
3. Open it — the rich editor loads automatically
4. Type / for commands, write with markdown shortcuts
:point_right: Extension docs →
graph LR
A["🔐 Sign Up"] -->|Elixpo OAuth| B["✍️ Write"]
B -->|Block Editor| C["🤖 AI Assist"]
C -->|Generate & Edit| D["👥 Collaborate"]
D -->|Real-time Sync| E["🚀 Publish"]
E -->|blogs.elixpo.com| F["🌍 Readers"]
style A fill:#9b7bf7,stroke:#7c5ce0,color:#fff
style B fill:#60a5fa,stroke:#3b82f6,color:#fff
style C fill:#c084fc,stroke:#a855f7,color:#fff
style D fill:#4ade80,stroke:#22c55e,color:#fff
style E fill:#f59e0b,stroke:#d97706,color:#fff
style F fill:#f87171,stroke:#ef4444,color:#fff
The heart of LixBlogs is a powerful block editor built on BlockNote — it feels like writing in Notion, but built for publishing.
| Block Type | What It Does |
|---|---|
| Paragraphs, Headings | Standard text with markdown shortcuts |
| Code Blocks | Syntax-highlighted with 30+ languages via Shiki |
| Math / LaTeX | Block & inline equations with KaTeX rendering |
| Mermaid Diagrams | Flowcharts, sequence diagrams, git graphs, and more |
| Images | Upload, embed URL, paste, drag & drop — auto WebP compression |
| Links | Auto-convert URLs, [text](url) syntax, OG preview on hover |
| Tables | Full table support with header rows |
| Checklists | Interactive checkboxes with checked/unchecked styling |
| Table of Contents | Auto-generated from your headings |
| Sub-Pages | Nest child pages inside your blog |
| Date Stamps | Inline date chips with a mini calendar picker |
| Mentions | Tag users @name, blogs, and organizations |
| Dividers | Horizontal rules to separate sections |
.
├── app/ # Next.js App Router pages, layouts, API routes
├── src/ # React components (Editor/), views, context, AI
├── lib/ # Server-side utilities (auth, media, tiers)
├── migrations/ # Cloudflare D1 SQL migrations
├── worker/ # Cloudflare Worker code
├── packages/
│ ├── lixeditor/ # @elixpo/lixeditor — the editor (npm)
│ ├── vscode-lixeditor/ # elixpo.lixeditor — VS Code extension
│ └── lixsketch/ # @elixpo/lixsketch — the whiteboard editor
└── public/ # Static assets, brand marks, fonts
graph TB
subgraph Client ["🖥️ Client"]
FE["Next.js 15 + React 19"]
ED["@elixpo/lixeditor"]
YJS["Yjs CRDT"]
end
subgraph Edge ["☁️ Cloudflare Edge"]
CF["Pages + Workers"]
D1["D1 Database"]
DO["Durable Objects"]
KV["KV Cache"]
end
subgraph Services ["🔌 Services"]
AI["LixSearch AI"]
CLD["Cloudinary"]
AUTH["Elixpo Accounts"]
end
FE --> CF
ED --> YJS
YJS -->|WebSocket| DO
CF --> D1
CF --> KV
FE --> AI
FE --> CLD
FE --> AUTH
style Client fill:#1a1a2e,stroke:#9b7bf7,color:#e8edf5
style Edge fill:#1a1a2e,stroke:#60a5fa,color:#e8edf5
style Services fill:#1a1a2e,stroke:#4ade80,color:#e8edf5
You need Node.js 22 (see .nvmrc) on Linux, macOS, or Windows via
WSL. No Elixpo keys, accounts or .env.local are needed.
npm ci
npm test
What works: installing from the lockfile and the full unit suite
(node --test). Tests set their own throwaway values, so they never read
configuration. Expected result: the summary at the end reports fail 0.
Optional, not yet part of PR CI: the CLI package has its own suite.
cd packages/lixblogs-cli && npm ci && npm test
Starting the app without keys: npm run dev also starts without
.env.local. It prints a "no keys" warning and ignores the encrypted values in
the committed .env. Public pages are expected to render; sign-in, uploads,
email and AI features stay off because they need keys. If something asks you
for a secret, open an issue instead of working around it.
This repository keeps configuration encrypted with SOPS. Applicants do not need any keys: setup, tests and warm-up tasks run locally without decrypting configuration. Once accepted, contributors receive SOPS access scoped to their work (for example integration tests or staging), revoked when the programme ends. Do not try to decrypt or commit configuration; if setup asks for a secret, open an issue.
npm run dev works without any configuration (see
Warm-up (no keys)). To sign in locally, copy
.env.example to .env.local and fill in the Auth block
with your own Elixpo Accounts OAuth client; every other section is optional
and only affects its own feature. .env.local is the single source for local
values used by both Next.js and the Cloudflare platform proxy. Do not create
.dev.vars; Wrangler gives that file precedence and it can silently shadow
.env.local with stale values.
npm ci
npm run dev
Then open http://localhost:3000.
Before opening a pull request, run the same checks CI runs:
npm test # Unit tests (node --test)
npm run pages:build # Cloudflare Pages build (@cloudflare/next-on-pages)
npm run build runs plain next build and does not check Cloudflare
compatibility. To preview the Cloudflare build locally, run
npm run pages:build first, then:
npm run db:migrate:local # Apply D1 migrations to the local database
npm run preview # Serve .vercel/output/static with wrangler pages dev
npm run deploy and npm run db:migrate act on the production Cloudflare
project and the remote D1 database. Production deploys run from CI after a
pull request is merged, so contributors do not need either command.
Repository history and the contributors graph provide the evidence for individual contributions. See CONTRIBUTING.md, GOVERNANCE.md, and our Code of Conduct before participating.
Elixpo is applying to be a mentoring organisation for Google Summer of Code 2027. Google has not announced the 2027 programme yet, and Elixpo has not been accepted. LixBlogs hosts two proposed project ideas:
| Idea | Size | Difficulty | Mentors (primary / backup) |
|---|---|---|---|
| LixBlogs read-access policy and offline conformance harness | 175 h | Hard | Divyanshu / Vivek Yadav |
| LixBlogs CLI automation contract v1 | 90 h | Easy | Divyanshu / Ayushman Bhattacharya |
How to start
Configuration and access
This repository keeps configuration encrypted with SOPS. Applicants do not need any keys: the warm-up tasks and the core of the idea run locally without decrypting configuration. Once accepted, contributors receive SOPS access scoped to their project (for example for integration tests or staging), which is revoked when the programme ends.
Questions go to [email protected]. GitHub Discussions for GSoC open once Google announces the 2027 dates.
Google Summer of Code is a programme of Google LLC; Elixpo is applying as a mentoring organisation and is not affiliated with or endorsed by Google.
Brand-ready marks and per-service icons live under public/ (logos,
mascot marks, og-image, and the Lix* brand fonts under
public/fonts/). A browsable kit is at
elixpo.com/assets.
The code is licensed under the MIT License. Brand and visual assets
are licensed under CC-BY-4.0. The Elixpo and
Oreo names, mascot, E-badge, and elixpo.com domains are covered by
TRADEMARKS.md, not by either licence. See also the repository
notice board and third-party notices.
Copyright permissions do not grant permission to impersonate Elixpo or present another deployment as the official service. This repository currently ships:
@elixpo/lixeditor (from packages/lixeditor/) — the published package name on the npm registry is reserved to Elixpo; the source is MIT and may be reused.elixpo.lixeditor (publisher elixpo, from packages/vscode-lixeditor/) — the Marketplace listing and the elixpo publisher identity are reserved to Elixpo; the source is MIT.blogs.elixpo.com — the official LixBlogs deployment; the brand, deployment, and operational data are reserved, while the source is MIT.Developers can use @elixpo/lixeditor (npm) and the LixEditor VS Code extension in their own projects under MIT.
Made with :purple_heart: by Elixpo
Website · npm Package · VS Code Extension · Report Bug · Request Feature
Made in the open, together. © 2023-2026 Elixpo.