








Zettel is a de-platformed personal information management (PIM) system that separates data from individual PIM applications so they can be easily shared across different applications.
Zettel Terminal is the main frontend, where users can visualize all their data. Public data is stored on a chain via tableland.
The atomic level of information in Zettel is a card. Zettel also allows user to create page, which is a bundle of cards. Page can be public or private. Ideally both would be stored in decentralized database, but for now we will use a hybrid approach: tableland for storing public data and mongodb for private data.
We plan to have three tableland tables: user’s public data, public page’s basic information, and the cards in public pages. Below is a general data model.

CREATE TABLE users (
id text,
display_name text,
background_color text,
avatar_file_url text,
primary key (id)
)
CREATE TABLE page (
id text,
owner_id text,
catalyst_user_id text,
created_at number,
updated_at number,
name text,
description text,
icon_emoji text,
color text,
view text,
avatar_file_url text
)
CREATE TABLE card (
id text,
ownder_id text,
catalyst_user_id text,
page_id text,
created_at number,
updated_at number,
color text,
position_index text,
blocks: text
)