Build a TODO App using the Collection-Document Storage Smart Contract
To reduce the need for custom contract development and accelerate Web2 to Web3 migrations, we've created a contract that provides a collection/document based storage model, inspired by Firebase’s Firestore. It supports structured JSON data storage using a flexible key-value format and an advanced permission model.
This solution is a major upgrade from the original user_map contract by enabling:
Namespaced storage: Data is organized into logical collections and documents.
Permissioned access: Fine-grained control over who can
create,update,delete, andreaddocuments.Role-based security: Support for roles like "creator", "admin", and any custom roles.
Batch operations: Write multiple documents in a single transaction.
Todo App Data Structure
This todo app interacts with the DocuStore smart contract by organizing data into three main collections. Each collection stores structured documents with user-specific data.
Todos Collection
interface Todo {
id: string;
text: string;
completed: boolean;
createdAt: number;
}Each document in the todos collection represents an individual task. It includes basic task details, and timestamps.
Profiles Collection
The profile collection stores public facing user profile data such as name, bio, and social media links.
Settings Collection
The settings collection holds user preferences for customizing the application experience, including UI theme, notification toggles, and localization options.
Building the Frontend
We've created a frontend which is a Next.js application built to interact with the DocuStore smart contract that can be downloaded at https://github.com/burnt-labs/todo-app-frontend. It showcases how users can connect their wallets, create todo records, update their profile, app settings and query their data.
Manual Installation
You will first need to clone the repository:
Install dependencies:
Copy the
.env.examplefile and name it.env.localand set the values with the information below:
NEXT_PUBLIC_TREASURY_ADDRESS
Treasury contract instance used for gasless transactions and grantz authorization to execute transactions via the DocuStore smart contract instance on behalf of users.
NEXT_PUBLIC_CONTRACT_ADDRESS
Address of the DocuStore smart contract instance.
NEXT_PUBLIC_RPC_URL
RPC endpoint for Xion (default: https://rpc.xion-testnet-2.burnt.com:443)
NEXT_PUBLIC_REST_URL
REST endpoint for Xion (default: https://api.xion-testnet-2.burnt.com)
Build and start the application:
You can now access the app at http://localhost:3000 in your browser.

Last updated
Was this helpful?