Create a personal database app
Up: Ideas for software projects
A GUI app to collect structured data of various types, such as books, recipes, films, to-do items, contacts, etc.
Such an app would allow writing down data in a structured format with all the benefits that come from it: custom queries, custom views. It would also allow exporting to different formats, including HTML for inclusion on web sites.
The app would ideally be local-first, with cloud sync available, and the data format would need to be open (or good export options would need to be available, but that’s less interesting).
Use cases
In no particular order, and including use cases that potentially wouldn’t be a great fit:
-
Personal library: What books do I have? What have I borrowed from people? What have I lent to people?)
-
Address book/contacts
-
Wish list (potentially public too).
-
Reference management: Could also use Zotero, of course.
-
Personal reviews: What films have I seen? How do I rate them?
-
Personal directory: See Add a link directory to my web site.
-
Job search: What jobs have I applied to? What is the status? Is there anything I need to do to progress particular applications?
-
Reading list: What books do I want to read? What have people recommended me? What am I reading right now? What have I read and what did I think about it? See Reading list.
-
Recipe list: What are the recipes that I like to make and want to share with others? See Recipes.
Prior art
In no particular order:
- FileMaker
- TapForms
- Steward
- AirTable
- Notion (databases)
- HyperCard
- Tellico (KDE)
- DataOrganizer
Also (RIP):
- Bento (RIP)
- Records (RIP)
- Symphytum (RIP)
Detailed examples
Mostly brainstorming here.
Reading list
A to-do list for books to read.
- Title
- Author
- Year
- Genre
- Read? (Checkbox)
- Comment
Job search
This one can be useful (from time to time) when applying at many different jobs at the same time.
- Name
- Contact person
- Action needed? (Checkbox) — e.g. when there is a take-home task
- Next deadline (date, optional) — e.g. same
Concepts
- A library is comparable to a database table.
- An item is an entry in a library, comparable to a database table row.
- A field is comparable to a database column.
- A schema1 defines which fields are available on a library.
Requirements
A woefully incomplete list. A brain dump.
Must have:
-
An API for exporting data, so that I can read data and include it on my web site.
-
Separate libraries, so that not everything is in one giant library.
Should have:
-
Offline-first support. Under no circumstance should this thing be in the cloud.
-
Text-based, so that Git (or other VCSes) can be used for version control.
-
Searching and filtering.
-
Schemas for each data type.
-
Permissive schemas, where errors should not prevent saving, but errors should still be surfaced as a list somewhere.
Nice to have:
- Saved searches.
- A CLI, in addition to a GUI.
For the future:
- Cloud sync support.
- Mobile app.
- Easy merge conflict resolution. (This might mean a custom format, or figuring out ways to work really well with Git.)
- Hierarchical items.
- Links between items.
UI
Three columns:
- List of libraries
- List of items in the selected library
- Item details
Field types
- text
- plain, Markdown, HTML, …
- single-line, multi-line
- number
- natural, integer, rational
- unit (e.g. EUR, USD)
- boolean (checkbox)
- date and/or time
- color
- single-select: enum
- e.g. rating (1–5 stars)
- single-select: reference
- multi-select: enum
- multi-select: reference
- calculation
- image
- file (attachment)
-
Not sure about “schema” as a name. Structure? Something else? ↩︎