Stylistic Guidelines

Here's an example of a simple spec:

Todoer is a personal ToDo app.

### Tech Stack

- Django
- Tailwind CSS

### Data

- Todo list item
  - content: plain text
  - created_at
  - marked_as_done_at

### Users and permissions

- users can sign in with Google (no email/password sign in)
- every user sees only their own todo items

### User stories

- add a new entry
- mark entry as Done (checkbox)
- remove an entry

The sections are not fixed, but it usually makes sense to specify:

  • A short description of what the app is supposed to be โ€” adding the app's name is often helpful
  • Tech stack โ€” what target language, frameworks and libraries you want to use. If you are using a popular framework like Django, the target language will be inferred from it
  • Data โ€” if the app is data-centric, it's a good practice to specify what data (entities and attributes) you envision
  • Users and permissions โ€” often helpful when you want to specify sign up/sign in behavior and permissions
  • Functional requirements โ€” can be described in many ways:
    • User stories work well for UI apps
    • Sequences of operations / pseudocode works well for data processing apps
  • Non-functional requirements โ€” can be captured in a separate section

General prompting techniques

CodeSpeak uses LLMs to process specs, so many prompt engineering techniques work well:

  • Examples of scenarios and input-output pairs
  • Prefer describing what to do (as opposed to what to not do)
  • XML tags can be useful to mark blocks with different purposes
  • Emphasizing importance with **bold** and IMPORTANT