The problem

Every family has a phrase that makes no sense outside the house. A nickname for the good scissors. A warning that sounds like nonsense. A mispronunciation that stuck. Everyone at the table knows what it means, and then one day nobody does. Most memory projects ask you to write a book. That is too much for a Tuesday night.

What it does

Household Words asks for one phrase, then interviews you about it. Four questions: who says it, what it means, where it came from, and how it is used. You answer in your own words. The app drafts a dictionary entry with a pronunciation, a part of speech, the meaning, who says it, usage, a short origin, and an example sentence. Every field is editable before you save. Saved entries go into a searchable phrasebook that prints cleanly on paper.

The AI is not allowed to invent your family. The prompt limits it to the phrase and your answers, and it writes "Not recorded yet" when an answer is missing. The preview is the human check: you fix what sounds wrong before it is saved.

How it is built

FastAPI serves the pages and handles the forms. Jinja templates render the phrasebook, the interview, the preview, and the print view. Entries live in a local SQLite file. Model calls go through the OpenAI SDK to Nebius Token Factory, using Nemotron 3 Nano with a larger fallback model. Two calls per entry, both asking for JSON.

If the key is missing or the model returns something invalid, the app falls back to standard questions and a draft built directly from your answers. The demo never breaks. The tests cover the sample data, validation, duplicate phrases, the fallback path, XSS escaping, and the print route.

What I learned

The interesting part was not generation. It was the boundary around it. The model can phrase an entry, but the facts have to come from the person. Once that rule was in the prompt and in the preview step, the app felt like a dictionary instead of a story generator.

The three entries on the home page belong to the Vale family, which is fictional. No real family data was used.

Built With

Share this project:

Updates

Submission history