# Gushi Namer: Chinese baby names assembled from classical poetry

> A React and Vite app that pairs characters from the Book of Songs, Tang poetry and other classical anthologies, keeps the source line with every suggestion, and stores favorites in the browser. The v3 rewrite dropped accounts entirely.

**holynova/gushi_namer** — Chinese baby name generator from classical poems and ancient texts

- Repository: https://github.com/holynova/gushi_namer
- Website: https://holynova.github.io/gushi_namer/
- Stars: 2,257 · Forks: 393
- Language: TypeScript
- License: not declared
- Published: 2026-10-06 · Updated: 2026-10-06 · Language: en
- Canonical page: https://hysenlabs.com/projects/holynova-gushi-namer

## A name generator that keeps the line it borrowed from

The premise is unusually specific. Instead of combining syllables from a syllable table, this generator draws characters from named classical anthologies and records which line each suggestion came from, so a name can be traced back to the verse that inspired it. The description calls it a Chinese baby name generator from classical poems and ancient texts, and the project's tagline is about turning pages of the classics and meeting a good name by accident.

Seven sources are supported: the Book of Songs (Shi Jing), Songs of Chu (Chu Ci), Tang poetry, Song lyric poetry in the ci form, the Yuefu ballad anthology, Three Hundred Classical Poems, and a set of famous fu and ci works. That last grouping is the vaguest of the seven, which is worth noting since it is the one category whose scope the project does not spell out.

The repository is TypeScript, sits on a master branch that is not archived, and was last pushed on 2026-09-16. Version 3.0.2 came out on 2026-06-17. The repository topics list chinese, classical-poetry, name-generator, poem, react, typescript and github-pages, which is an accurate summary of what you get.

One search caution: the name reads as a Japanese word to English speakers, so searches for it pull back questions about Japanese personal names. The project itself has nothing to do with those.

## What the v3 rewrite actually changed

The release notes for v3.0.0, published on 2026-06-13, describe the most substantial version and they read like a retreat from a previous design rather than a feature pile. The highlights list says the naming experience was redesigned for desktop and mobile, that names are now generated immediately on launch and when switching books, and that share cards were added with a project QR code and highlighted source characters.

The most consequential line is the removal of accounts. The notes say login and registration were removed from the active app flow and that favorites are stored locally in the browser. JSON import and export for the favorites list came with the same release, which is the pragmatic answer to storing user data in a browser without a backend.

Two follow-up patches landed the same week. v3.0.1 fixed the page title, the share card SVG and the about page scroll position, and added a visit counter. v3.0.2 changed the share card to render from the real page DOM and export as PNG, so what you preview and what you download now share the same fonts, layout and QR code rather than being produced by two separate renderers.

The root tree shows why the direction shifted. There is a `_legacy/` directory alongside the current `src/`, a `dist/` directory checked into the repository, and a `SUPABASE_SETUP.md` next to a `DEPLOYMENT.md`. The Supabase client is still a dependency in package.json even though the app no longer requires sign-in, which suggests the backend scaffolding is retained rather than removed.

## Running it locally with pnpm and Vite

The build tool is Vite with React 19 and TypeScript, and the package manager the project uses is pnpm. The README gives four commands for a local checkout:

```bash
git clone https://github.com/holynova/gushi_namer.git
cd gushi_namer
pnpm install
pnpm dev
```

Production output is a separate step:

```bash
pnpm build
```

The package.json scripts fill in the rest. `dev` runs vite, `build` runs `tsc -b && vite build`, so the TypeScript project references are checked before the bundle is produced, `lint` runs eslint, and `preview` serves the built output. Styling is Tailwind CSS 3 with a tailwind.config.js and postcss.config.js at the root, and the config files are split three ways with tsconfig.json, tsconfig.app.json and tsconfig.node.json.

The runtime dependencies are worth listing because they explain the feature set. `qrcode.react` draws the QR code on the share card, `html-to-image` is what turns the rendered card into a downloadable PNG, `canvas-confetti` handles the celebration when a name is saved, `lucide-react` provides icons and `clsx` handles conditional class names. Each feature in the README maps to a specific package rather than being hand-built.

There is a deployed demo on GitHub Pages at holynova.github.io/gushi_namer, with a second address at xiaosang.net serving the same app.

## Favorites live in the browser, which shapes the whole design

Because there is no account, the favorites list is browser local storage and nothing else. The README states plainly that favorites are saved in the current browser with no login required. The consequence is structural rather than cosmetic: a list you care about exists on one device, in one browser profile, and clearing site data removes it.

That is exactly why JSON export and import exist. You export the favorites list to a file and import it back later, which covers a browser migration and gives you something to back up. It also means the export format is your only interoperability path: there is no documented API for reading or writing favorites from outside the app.

The mobile behavior is handled explicitly rather than left to the browser's address bar. On scroll, the header collapses automatically and keeps three quick actions available, described as regenerating the batch, opening favorites, and reaching the about page. The README ships matching desktop and mobile screenshots for the home, favorites and share card screens, which is a useful signal about how seriously the responsive layout was treated.

The share card is the feature that makes the app worth showing to someone else. It carries the original line of verse, the source attribution, a link to the project and a QR code, with the borrowed characters highlighted. The project publishes one of these cards itself in the assets directory, so you can see the intended output before generating one.

## Three loose ends in the repository

None of these are defects in the app. They are things to know before you build on it.

The first is licensing. The repository has no license identifier recorded, and there is no LICENSE file in the tree. Without one, the default is that you do not have permission to reuse the code or the verse data, whatever the public demo and GitHub Pages deployment might suggest. The author is listed as holynova, and the README does point to a GitHub Sponsorship-free credit line and a Star History badge, but that is attribution, not a grant.

The second is the environment files. The tree contains both `.env` and `.env.example`, and the example file is explicitly for Supabase, which means it expects two variables:

```bash
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
```

Those are the names a deployment would need if any Supabase-backed feature is still reachable. Since v3.0.0 removed sign-in from the app flow, it is fair to ask what, if anything, still uses them. Anyone forking this should check the committed `.env` before assuming the deployed build depends on a backend.

The third is that `dist/` is tracked. Build output in version control makes diffs noisy and means the published bundle and the source can drift. It is a common accident rather than a decision, but it is the kind of thing that makes `dist/` an unreliable thing to read as an example of the source.

## Conclusion

Gushi Namer is a small, complete front end that does one thing and keeps its source citations, which is more than most name generators bother with. It suits someone who wants suggestions with a traceable line of verse behind them and does not mind writing down the ones worth keeping. It does not suit anyone who needs the poem database, because the character data lives in the application rather than behind a documented API, and the repository carries no LICENSE file, so reuse of the code or the verse data needs the author's permission. The practical starting point is pnpm install and pnpm dev on a local checkout, and the practical first check is whether the six suggestions it offers on launch feel worth saving.

## FAQ

### What sources does Gushi Namer use to build Chinese baby names?

Seven classical anthologies: the Book of Songs (Shi Jing), Songs of Chu (Chu Ci), Tang poetry, Song lyric poetry in the ci form, the Yuefu ballad anthology, Three Hundred Classical Poems, and a set of famous fu and ci works. Each generated name keeps the verse line it came from, so the suggestion can be traced back to its source.

### Do I need an account to save names in Gushi Namer?

No. Version 3.0.0 removed login and registration from the app flow, and favorites are stored locally in the browser instead. Because the data is local, the same release added JSON import and export so you can back up the list or move it to another browser.

### How do I run Gushi Namer on my own machine?

Clone the repository, change into the gushi_namer directory, then run pnpm install followed by pnpm dev. The project uses Vite with React 19 and TypeScript, and the build step is pnpm build, which runs `tsc -b` before vite build. A deployed demo is also available on GitHub Pages.

### Can I reuse the Gushi Namer code or its poem data?

Not without asking. The repository has no license identifier recorded and no LICENSE file in its tree, which means no permission is granted to reuse the code or the character data. The README credits the author as holynova, so any reuse needs the author's agreement first.

## Sources

- [holynova/gushi_namer on GitHub](https://github.com/holynova/gushi_namer)
- [Issues](https://github.com/holynova/gushi_namer/issues)
- [Project website](https://holynova.github.io/gushi_namer/)
- [README](https://github.com/holynova/gushi_namer/blob/master/README.md)
- [Releases](https://github.com/holynova/gushi_namer/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/holynova-gushi-namer
