HyperCard Clone

From Jonathan Gardner's Tech Wiki
Jump to: navigation, search

Idea

The need arose from me trying to build an RPG world. I want hundreds of characters and locations, and I want stories for everything. I can write stories, but I can't keep track of all of them. That's when I thought I could build yet-another-wiki to try to keep everything straight.

The "ugh" thoughts were:

  • Wiki is slow.
  • Wiki is hard to organize.
  • I'd like to add some programming elements, more than wiki can do.

In short, a fast, organizable, programmable wiki!!!

Well, I remembered Hypercard from Apple way back when, and a lot of the ideas intrigued me. Here is my design ideas.

Terminology

card
A page. It has content, it has attributes.
attribute
A set of key-value pairs (a dict or hashmap or table) associated with the card. These are indexed and accessible. Some of them are automatically generated.
tag
A set of keys linked to the card. They cannot have values. (Really, it just an attribute 'tags' that is a set.)
link
A way of linking one card to another. The cards can be linked through the content, of course, just like in HTML. They can also be linked via relationships through attributes, or as an attribute.
field
A way of including an attribute into the content.
template
A card that provides a fill-in-the-blanks for another card. The content is NOT copied: If the template changes, the cards will change.

Use Cases

  • Create/Edit a card.
  • Copy a card.
  • Add/Edit/Remove content.
  • Add/Change/Remove attributes.
  • Add/Remove tags.
  • Links in the content.
  • Include attributes in the content.
  • Save a card as a template.
  • Embed a card in another card -- templates.
  • Buttons.
  • Text fields.
  • Checkboxes.
  • etc...

Content Language

The content language needs to be simple.

I really don't like HTML so I'll invent my own syntax that gets compiled to HTML. LaTeX is really nice, so maybe I'll do something similar to that. (What is TeX really?)

Need special things for embedding things in the content.

Maybe I will run with HTML and just have a full browser inside the card?!? I really, really hate Javascript.

Storage

The data can be stored in a SQLite database.

Code

Python, of course. Maybe Qt on the frontend?