Skip to content

Commit 7e45352

Browse files
authored
Merge pull request #33 from aleph23/dev
push changes to primary branch
2 parents 0a26a7a + 1bfab9f commit 7e45352

170 files changed

Lines changed: 20137 additions & 12323 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
* text eol=lf
2+
*.png binary
3+
*.jpg binary
4+
*.jpeg binary
5+
*.webp binary
6+
*.gif binary
7+
*.ico binary

.github/workflows/ci.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches: [main, prime, dev]
6+
7+
concurrency:
8+
group: ci-${{ github.ref }}
9+
cancel-in-progress: true
10+
11+
jobs:
12+
ci:
13+
name: Lint · Typecheck · Build · Test
14+
runs-on: ubuntu-latest
15+
16+
strategy:
17+
matrix:
18+
node-version: [20]
19+
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Setup Node.js ${{ matrix.node-version }}
25+
uses: actions/setup-node@v4
26+
with:
27+
node-version: ${{ matrix.node-version }}
28+
cache: npm
29+
30+
- name: Install dependencies
31+
run: npm install
32+
33+
- name: Lint (ESLint)
34+
run: npm run lint
35+
36+
- name: Format check (Prettier)
37+
run: npm run format:check
38+
39+
- name: Typecheck (tsc)
40+
run: npm run typecheck
41+
42+
- name: Build
43+
run: npm run build
44+
45+
- name: Test
46+
run: npm run test

.gitignore

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ logs/
1010
.DS_Store
1111
.vscode/
1212
.idea/
13+
.qlty/
1314
.vs/
1415
*.suo
1516
*.ntvs*
@@ -55,8 +56,11 @@ tmp/
5556
# ─────────────────────────────────────────────
5657
.github/copilot-instructions.md
5758
prompts.json
58-
/.claude
59-
/docs
59+
.claude/
6060
prompts.json
6161
settings.json
6262

63+
bun.lockb
64+
config.json
65+
.mcp.json
66+
.gemini/

.jules/bolt.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

.prettierignore

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# ─────────────────────────────────────────────
2+
# Logs
3+
# ─────────────────────────────────────────────
4+
logs/
5+
*.log*
6+
7+
# ─────────────────────────────────────────────
8+
# OS / Editor / Tooling
9+
# ─────────────────────────────────────────────
10+
.DS_Store
11+
.vscode/
12+
.idea/
13+
.qlty/
14+
.vs/
15+
*.suo
16+
*.ntvs*
17+
*.njsproj
18+
*.sln
19+
*.sw?
20+
21+
# JetBrains / VSCode AI tooling
22+
appmap.yml
23+
.continue/
24+
25+
# ─────────────────────────────────────────────
26+
# Package managers
27+
# ─────────────────────────────────────────────
28+
node_modules/
29+
yarn.lock
30+
pnpm-lock.yaml
31+
pnpm-workspace.yaml
32+
package-lock.json
33+
34+
# ─────────────────────────────────────────────
35+
# Build output (Electron + Vite)
36+
# ─────────────────────────────────────────────
37+
build-electron/
38+
dist-electron/
39+
portable-build/
40+
dist/
41+
dist-ssr/
42+
43+
# Electron artifacts that sometimes escape
44+
*.asar
45+
*.pak
46+
*.bin
47+
48+
# ─────────────────────────────────────────────
49+
# Temporary / local environment
50+
# ─────────────────────────────────────────────
51+
tmp/
52+
*.local
53+
*.txt
54+
55+
# ─────────────────────────────────────────────
56+
# GitHub-specific
57+
# ─────────────────────────────────────────────
58+
.github/copilot-instructions.md
59+
prompts.json
60+
.claude/
61+
settings.json
62+
63+
bun.lockb
64+
config.json
65+
.mcp.json
66+
67+
# ─────────────────────────────────────────────
68+
# Binary / image assets (prettier can't format)
69+
# ─────────────────────────────────────────────
70+
*.png
71+
*.jpg
72+
*.jpeg
73+
*.gif
74+
*.ico
75+
*.svg
76+
*.webp
77+
img/
78+
res/

.prettierrc.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"printWidth": 120,
3+
"tabWidth": 2,
4+
"useTabs": false,
5+
"semi": false,
6+
"singleQuote": true,
7+
"jsxSingleQuote": true,
8+
"trailingComma": "all",
9+
"bracketSpacing": true,
10+
"arrowParens": "always",
11+
"proseWrap": "preserve",
12+
"endOfLine": "lf"
13+
}

LICENSE-FAQ.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ Scanners may report a "WTFPL" license entry in package-lock.json coming from nod
2424

2525
## Contact
2626

27-
If you need additional proof or a rebuild to demonstrate the dependency is not included in production artifacts, please open an issue or contact the maintainers.
27+
If you need additional proof or a rebuild to demonstrate the dependency is not included in production artifacts, please open an issue or contact the maintainers.

README.md

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,46 @@
22

33
---
44

5-
## Project Introduction
5+
![UI dark view](img/2025-10-23_113717.png 'Dark')
66

7-
This app began as an exclusively vibed character creator in Mandarin by user @Idun & Co. I initially just wanted to fully translate it to EN, but the .PNG save function didn't work. So I fixed that, then got to tinkering a little. Like, for example, all of the elements of the version 3 card weren't captured. Not like we're ever going to use all of them, but just in case, they're there.
8-
9-
**However, today, the most import change is finally fully working (fingers crossed).** Arguably the most important part of this or any similar application is the prompt sent to the AI helper. Previously, they were hardcoded. Now they're fully exposed. in-app editable and they save to an external .JSON file along side the executable. Plus, feel free to break things experimenting; the defaults are still hardcoded to come to the rescue of a misplaced comma or un-escaped double-quote control character or three.
10-
11-
'That's cool,' you say, 'but you still didn't make it so that I could save my damned API key.' And you'd be right. But that's next. I'd argue that editable prompts is much more important--and I'd be right. Next week? External settings file. And by March? This thing will not only be creating all of your characters AND personae, it'll be playing them through to your bluetooth snowboard helmet headphones so that you can go get some fresh air...if that's still a thing.
12-
13-
![UI dark view](img/2025-10-23_113717.png "Dark")
14-
15-
![UI light view](img/2025-10-23_113814.png "Light")
7+
This app began as an exclusively vibed character creator in Mandarin by user @Idun & Co. I initially just wanted to fully translate it to EN, but the .PNG save function didn't work. So I fixed that, then got to tinkering a little. Like, for example, all of the elements of the version 3 card weren't captured. Not like we're ever going to use all of them, but just in case, they're there. **But today, the most important change is finally fully working (fingers crossed).** Arguably the most important part of this or any similar application is the prompt sent to the AI helper. Previously, they were hardcoded. Now they're fully exposed. in-app editable and they save to an external .JSON file alongside the executable. Plus, feel free to break things experimenting; the defaults are still hardcoded to come to the rescue of a misplaced comma or un-escaped double-quote control character or three.
8+
'That's cool,' you say, 'but you still didn't make it so that I could save my damned API key.' And you'd be right. But that's next. I'd argue that editable prompts is much more important--and I'd be right. Next week? External settings file. And by March? This thing will not only be creating your all of your characters AND personae, it'll be playing them through to your blueetooth snowboard helmet so that you can go get some fresh air--if that's still a thing.
169

1710
**Download Portable Executable from [Releases](https://github.com/aleph23/tavern-card-crafter-v3/releases)**
1811

1912
### Key features
2013

21-
#### 🧩 Prompt Management (FINALLY)
22-
23-
- **Detestable Defaults** I spent a great deal of time coming up with perfectly mediocre prompts designed to leave you hungry and wanting. What better motivator to get you to hunt down that last shred of creativity?
24-
- **Editable prompt templates**: Manage and edit prompt templates used across AI generation flows. Like, huh? Rename the saved prompts.json to prompts.YourMom and swap it in when you're making 'YourMom' bots.
25-
26-
#### 🤖 Hey Bots! Get Bots to make your bots
27-
28-
- **But Seriously** use the buggers for a little kick start. If you don't edit afterwards, your character will taste like ash.
29-
- **AI Character Creation**: Quickly generate structured character information from free text using AI.
30-
- **Multi-milieu support**: Stock types like anime, gaming, classic fiction, historical figures, to help compensate for full creative constipation.
31-
- **AI Content Extraction**: Paste any text (novel excerpt, Mom's recipe cards, apology emails you never sent), and AI will extract and convert it into structured character fields and do what it does so well... Hallucinate details.
32-
- **Prompt persistence**: User-created or edited prompts are persisted across sessions. Because they're in an external file.... Did I mention that already? On Desktop (packaged Electron releases) prompts are saved/persisted via Electron IPC to local file, prompts.json.
14+
#### 🤖 Hey Bots! Get Bots to make your bots!
3315

34-
NOTE: For easy laziness, use the electron slop, err, app. The electron *app*... in releases. To your right.
16+
- **But Seriously** use the buggers for a little kick start. If you don't edit afterwards, we will ALL know.
17+
- **Intelligent Character Creation**: Quickly generate structured character information from free text using AI.
18+
- **Multi-genre support**: Stock character types like anime, games, novels, historical figures, to compensate for full cranial constipation.
19+
- **Intelligent Content Extraction**: Paste any text (novel excerpt, Mom's recipe cards, apology emails you never sent), and AI will extract and convert it into structured character fields.
3520

36-
#### ⚙️ AI Settings improvements
21+
#### ✏️ Full character editing _(Skip if you know what a character card v3 is)_
3722

38-
- **Any OpenAI-compatible API**: Builtin; Local options, plus OpenRouter, OpenAI, DeepSeek, Moonshot, OneAPI, Zhipu, and, of course, Yi.
39-
- **Connection & generation controls**: Configure model/host settings, inference temperature, and max tokens. Who knows? Maybe your backend will even listen and obey. (Yes. I'm talking to you, rogue OpenRouter providers).
23+
- **Basic information**: Name, description, avatar, POV, things.
24+
- **Personality Traits**: Detailed personality traits and behavior patterns. Or not. Your choice.
25+
- **Scenario Settings**: Backstory, environment, and other scenario-specific settings. You know, like in the damn chara-card-v3 spec, right?
26+
- **Dialogue System**: Compose sample dialogues, greetings, and alternative greetings. Guess where we got that one from... yep, same spec.
27+
- **Character/Lore Book**: Add and manage worldbuilding or memory entries.
28+
- **Keyword/Tag Classification**: Role labeling and metadata management for easy categorization. Probably best not to get AI to do this for you, but sometimes it's fun AND useless.
4029

41-
#### 📟 Multi-platform support (AI **really** wants me to lie to you about this. So I guess I will)
30+
#### 🧩 Prompt Management (FINALLY)
4231

43-
- **Dev/PITA version**: Browser access and use (Vite & Node.js based).
44-
- **Desktop App**: *(Theoretically Cross-platform)* Electron desktop app with (also theoretical) filesystem access.
45-
- **Sidebar Layout**: Because clickable menus are still easier than psychic links.
32+
- **Detestable Defaults** I spent a great deal of time coming up with terrible prompts for you to hate. What better motivator to get you to hunt down that last thread of creativity.
33+
- **Editable prompt templates**: Manage and edit prompt templates used across AI generation flows. Like, huh? Rename the prompts.json to prompts.YourMom and swap it in when you're making 'Your Mom' bots.
34+
- **PromptEditor UI**: A small UI to create, edit, preview, and select prompt templates while generating.
35+
- **Prompt interpolation utilities**: Reusable utilities for prompt variable interpolation and templating. Not really, but Gemini thought it looked cool.
4636

47-
#### 🛠 Practical features
37+
#### 💾 Persisted prompts and cross-environment support
4838

4939
- **Real-time preview**: That's right kids. Gone are the days when the Type Setters Union has you over a barrel at the eleventh hour. Welcome to 1987!
50-
- **Multi-format export**: Export cards as JSON and PNG formats (PNG export embeds the character card into an image; avatar upload required). That's right. Two. *That twice as many as one!*
40+
- **Multi-format export**: Export cards as JSON and PNG formats (PNG export embeds the character card into an image; avatar upload required). That's right. Two. _That twice as many as one!_
5141
- **Language & localization**: The UI is now primarily English. If anyone wants to check and see if the Mandarin is still correct, cool, let me know. Wanna translate into your own native scrawl? PR me your language under /src/contents/LanguageContext.tsx
52-
- **Responsive Design**: Because. You can drag that bottom right corner wherever the hell you feel like. I mean... don't get too crazy. But *almost* wherever.
42+
- **Responsive Design**: Because. You can drag that bottom right corner wherever the hell you feel like. I mean... don't get too crazy. But _almost_ wherever.
5343

54-
#### ✏️ Full character editing *(character card v3)*
44+
#### ✏️ Full character editing _(character card v3)_
5545

5646
- **Basic information**, **Personality Traits**, **Scenario Settings**, **Dialogue**, **Character/Lore Book**, **Keyword/Tag Classification**: Everything from the version 3 spec.
5747

@@ -72,7 +62,7 @@ NOTE: For easy laziness, use the electron slop, err, app. The electron *app*...
7262
### 🤖 AI character card from thin air
7363

7464
1. So, you can cut and paste something from fandom, wikipedia, or your friend's facebook page.
75-
2. Then pick from a stock writing type (anime, gaming, novels, even well-known dead folk, etc. *(there is not et cetera)*).
65+
2. Then pick from a stock writing type (anime, gaming, novels, even well-known dead folk, etc. _(there is not et cetera)_).
7666
3. Click "AI Analysis / Generation" — AI will not just extract, but also shamelessly embellish structured character fields.
7767
4. Click generated fields to fill them into the Editor with one click.
7868

@@ -90,11 +80,11 @@ Downloaded a card from Janny, Chub, or RisuAI, but it just isn't up (or down) to
9080
1. Edit basic fields (name, description, avatar).
9181
2. Edit moderate fields (personality, behavior patterns, and special scenario notes).
9282
3. Edit fields of three and four dimensional space (first message, examples, and alternative greetings).
93-
4. Teach your bot differential equations and then make it thinks it's Jim Simons. You'll be broke or a billionaire in no time.
83+
4. Teach your bot differential equations and then make it thinks it's Jim Simons. You'll be broke or a billionaire in no time.
9484

9585
### 📄 JSON Preview
9686

97-
![preview the generated JSON before saving](img/2025-10-23_114417.png "JSON view")
87+
![preview the generated JSON before saving](img/2025-10-23_114417.png 'JSON view')
9888

9989
1. Real-time JSON preview of the generated character card. That's right folks. When I said no more waiting for the type setter, I meant it! Bye bye thermographers! No more servants of questionable will carving stones. Bend photons to your will with reckless abandon!
10090
2. Syntax highlighting now with de-fanged HTML content, sparing you from XSS vectors, vixens and vexes.
@@ -114,7 +104,7 @@ Downloaded a card from Janny, Chub, or RisuAI, but it just isn't up (or down) to
114104

115105
---
116106

117-
![For you light-loving masochists](img/2025-10-23_113929.png "AI results")
107+
![For you light-loving masochists](img/2025-10-23_113929.png 'AI results')
118108

119109
## For Development: Get started quickly (Probably don't read any of this, but AI likes to talk almost as much as I do, so it had to write another damned chapter.)
120110

@@ -155,15 +145,15 @@ npm run electron-dev
155145

156146
- Web version: open `http://localhost:8080` (or the port Vite reports) in your browser
157147
- Desktop (dev): running `npm run electron-dev` will open an Electron development window
158-
- Desktop (full prompt persistence): Just be lazy and download the .exe. Save your creative juices for your character development.
148+
- Desktop (full prompt persistence): Just be lazy and download the .exe. Save your creative juices for your character development.
159149

160150
---
161151

162152
## Project structure
163153

164154
Note: The project file structure has undergone significant changes to support prompt management, prompt persistence, localized UI, and modular AI integration. The tree below is a representative layout; consult the repository for the canonical structure.
165155

166-
```vtree
156+
```
167157
src/
168158
├── components/
169159
│ ├── CharacterForm/
@@ -207,7 +197,7 @@ src/
207197

208198
## Contribution Guide
209199

210-
Howdy — issues and pull requests are things you can do. If you add providers or functionality, include tests or don't. Sharing of prompts is always welcome. If it doesn't work, don't assume I already know. Because I don't already know. As best I can tell, it's perfect, so unless you say otherwise, I remain in another world.
200+
Howdy — issues and pull requests are things you can do. If you add providers or functionality, include tests or don't. Sharing of prompts is always welcome. If it doesn't work, don't assume I already know. Because I don't already know. As best I can tell, it's perfect, so unless you say otherwise, I remain in another world.
211201

212202
## License
213203

@@ -217,7 +207,7 @@ This project was licensed under the MIT license and I am way too not giving a da
217207

218208
## Changelog
219209

220-
### [v0.3.0 (1/19/26)](https://github.com/aleph23/tavern-card-crafter-v3/releases)
210+
### v0.3.0 (1/19/26)
221211

222212
#### New Features
223213

bun.lockb

-194 KB
Binary file not shown.

components.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
"cssVariables": true,
1111
"prefix": ""
1212
},
13+
"iconLibrary": "lucide",
1314
"aliases": {
1415
"components": "@/components",
1516
"utils": "@/lib/utils",
1617
"ui": "@/components/ui",
1718
"lib": "@/lib",
1819
"hooks": "@/hooks"
20+
},
21+
"registries": {
22+
"@glass-ui": "https://glass-ui.crenspire.com/r/{name}.json"
1923
}
20-
}
24+
}

0 commit comments

Comments
 (0)