Experimental. Every published package in this repository is experimental: its exports, build entries and files may change or be removed in any release, a minor one included. See Stability.
- π§± The Stack
- π Local Development
- π§ Architecture
- π¦ Packages
- π Claude Code Plugins
- π€ Community
- βοΈ License
|
|
The unified toolchain for the web: Vite, Vitest, oxlint, oxfmt and the |
|
|
Infrastructure as Code in any programming language. |
|
|
ICANN-accredited domain name registrar providing domain name registration and web hosting. |
|
|
Infrastructure, Instantly. |
The projects make use of symlinks in the git project. On Windows, this may not work as expected without extra configuration. To configure git to create symlinks on windows, you need to enable the Windows "Developer Mode" setting, and also set the core.symlinks git feature using either of the following commands:
# Global setting
git config --global core.symlinks true
# Local setting
git config core.symlinks trueAfter applying this setting, you may need to reset your local branch to ensure the files get rewritten as symlinks. Note that this step is destructive and you will want to push any changes you have made prior to resetting your branch.
git reset --hard- Install the global Vite+ CLI, then the node and pnpm versions the repository pins:
vp env install- Install Node Modules:
pnpm i-
Install PostgreSQL + PgAdmin. On macOS,
brew install postgresql@18installs the server andbrew services start postgresql@18keeps it running across logins and reboots. Its binaries are in/opt/homebrew/opt/postgresql@18/bin, which is not onPATHuntil added. The server listens onlocalhost:5432. Theesposterdatabase holds no data worth keeping:pnpm devruns the migrations on it. -
Add
.envfile according to.env.exampleinapps/webdirectory. -
Check what this machine still needs, the tools and logins with the command that installs or logs in to each:
pnpm ai:setupCheckout the deployment documentation for more information.
The parity data lives in {data-root}/genshin-parity unless GENSHIN_PARITY_DIRECTORY names another folder. Create {data-root}.noindex as the data folder and make {data-root} a symlink to it: macOS never indexes a *.noindex folder and Spotlight follows no symlink, so every {data-root}/... path still resolves, and a real {data-root} folder must not be created beside the link. Then add node_modules and the pnpm store ({home}/Library/pnpm/store) under System Settings β Spotlight β Search Privacy, which can only be done by hand. The reason is in the machine efficiency design.
- Build the packages to be used by the application:
vp run build:packages- Change to the app directory:
cd apps/web- Start the development server on http://localhost:3000
pnpm devBuild the application for production:
pnpm buildLocally preview production build:
pnpm -C apps/web previewEsposter is a pnpm workspaces monorepo. See monorepo tooling for workspace script orchestration and publishing boundaries.
Packages are used directly by the nuxt application via workspace:*.
How AI sessions land their commits, and how those commits are reviewed on the way to main, is in the review docs.
Each node's hue and tint are the role its edges give it, darkest at what the repo ships and lightest at what the rest of it stands on; the key is drawn into the image. Regenerate it from the repo root with:
pnpm graph:genWarning
The published packages are built for this repository first. Use them at your own risk: their APIs may change in any release, without a deprecation period, in pursuit of better performance and simpler code.
| Package | Description | Published |
|---|---|---|
apps/functions |
Serverless Azure Functions backend β push notifications, webhooks, EventGrid | β |
apps/infra |
Pulumi infrastructure code and migration tools for Azure resources | β |
apps/web |
Main Nuxt web application β frontend, server routes, tRPC API | β |
packages/agent-console-server |
Agent console host β Claude Code sessions over a token-gated loopback WebSocket | β |
packages/azure |
Azure wire conventions β OData filter clauses, entity key casing, service limits | β |
packages/azure-mock |
Mock Azure service classes for local dev and testing | β |
packages/configuration |
Shared ESLint, TSConfig, and tsdown build configurations | β |
packages/db |
Database connection utilities for Drizzle ORM, Azure Table, Blob, and WebPubSub | β |
packages/db-mock |
In-memory PGlite database factory for unit and integration tests | β |
packages/db-schema |
Drizzle ORM schemas and migrations (PostgreSQL source of truth) | β |
packages/follow-ups |
Claude Code plugin β a session's unfinished follow-ups written into a TodoList and drained until none is left | β |
packages/genshin-engine |
Anime-style open-world engine for three.js WebGPU β toon materials, outlines, post-processing, world kits and music | β |
packages/genshin-interface |
Genshin's 2D interface β the screen root, its units and pointer, and the pieces the game's screens share | β |
packages/genshin-mods |
Claude Code plugin β eight mods, five under one band and three guards: next steps, cache and usage with a one-click handoff, recording mode, a goal meter, a collision guard, a delegation guard, a disk-scan guard and a whole-index guard | β |
packages/genshin-persona |
Claude Code plugin β a Genshin character picked by birthday, replies spoken in its own cloned voice | β |
packages/genshin-text |
The game's own text in its fifteen languages β the language registry, a locale matcher, and the game's strings by text id | β |
packages/genshin-world |
Genshin's world on the engine β the region catalogue, each region's data, the TresJS components and the interface screens | β |
packages/headless-block-editor |
A headless block editor: a typed node tree over a registry, the commands that edit it as JSON Patch operations, navigation and undo history, with no framework or DOM. | β |
packages/keyframe-store |
Content-addressed version store β zstd keyframes and deltas over any backend | β |
packages/math-expression-compiler |
Math expressions compiled once into a function of plain numbers β mathjs's numeric language, held to parity with its recorded answers | β |
packages/mjml-blocks |
MJML's components as block types on the headless block editor β each component's attributes, defaults and nesting rules, a render to MJML's JSON form and source, and a read back from MJML, with no framework, DOM or MJML runtime. | β |
packages/nuxt-security-module |
Nuxt security module for Nitro 3 and h3 2 β security headers, a nonce Content Security Policy, subresource integrity, CORS, basic auth, a rate limiter and a request size limit | β |
packages/parse-tmx |
Parser for Tiled Map Editor .tmx files |
β |
packages/pitch-transcription |
The notes in a recording β Basic Pitch on ONNX Runtime, its readings turned into notes, bends and MIDI | β |
packages/shared |
Shared TypeScript types, utilities, and error classes | β |
packages/shared-node |
Node-only shared tooling β the machine-wide download cache, hidden-window child processes and benchmark reporting for vitest bench runs | β |
packages/tresjs-nuxt |
TresJS for Nuxt β a Nuxt module that auto-imports the TresJS core API, registers TresCanvas for client and server, and registers every installed @tresjs package's components and composables, with no devtools UI of its own. | β |
packages/trpc-msw |
tRPC for Mock Service Worker β every transport answered by tRPC's own handlers | β |
packages/trpc-nuxt-module |
tRPC for Nuxt β a module registering the router's HTTP and WebSocket handlers, with composables over useAsyncData |
β |
packages/vue-canvas-frame-headless |
A headless canvas frame: an isolated document at a width, scaled down to fit a narrower pane, with its styles adopted into it, and no styling of its own. | β |
packages/vue-grid-layout-headless |
A headless grid: the placement of items on a grid of cells, and the pointer gestures that move and resize them, with no styling. | β |
packages/vue-pdfjs-headless |
Headless Vue composables over pdfjs-dist: a document's loading, a page's drawing and the viewer's state, with no styling and no renderer of its own. | β |
packages/vue-phaserjs |
Phaser game engine integration for Vue | β |
scripts |
The repository's own tooling β workspace graph, dependency report, sweep scans | β |
This repository is also a Claude Code plugin marketplace named esposter, declared in .claude-plugin/marketplace.json. Anyone adds it by the repository's GitHub name and installs a plugin by its marketplace name:
claude plugin marketplace add Esposter/Esposter
claude plugin install genshin-persona@esposter
claude plugin install genshin-mods@esposter| Plugin | What it does |
|---|---|
genshin-mods |
Eight mods: five under one band above the prompt, waypoints (the next steps, one press each), resin (cache, context, limits and cost, with warm, compact and a one-click handoff), veil (recording mode), commission (a goal's task list and clock) and ward (a question before editing a file another session just changed), and three guards: a delegation guard that nudges a run of lookups toward a haiku agent, a disk-scan guard that refuses a Bash scan from a root or home folder, and a whole-index guard that refuses a git command over the whole index while another session shares the checkout. |
genshin-persona |
Speaks as the Genshin Impact character whose birthday is nearest to today, with each answer opening on a spoken line and the rest in plain prose, and reads each reply aloud in the character's own cloned voice. |
A plugin here is an ordinary workspace package, so it is formatted, linted, tested and dependency-bumped with everything else, and a merge to main is its release: an installed copy follows the marketplace on the next plugin update. How that is built, and what it deliberately does not do, is on the Claude interface page.
We welcome contributions from everyone and are committed to maintaining a friendly, safe, and welcoming community. Start with the Contributing guide, which also lists the recommended editor extensions. Please see our Code of Conduct and Security Policy for more information.
This project is licensed under the Apache-2.0 license.