← All posts

Data Desktop | Case Study

The problem

I've always thought that it was weird that corporations were able to make money off of user data. All the freemium software collecting data to sell ads? Great for the economy, however it created a thought for me about what would it be like if the user were able to collect their own data and sell that data themselves. There have been multiple projects to do this, and unfortunately, I don't trust any of them, which is also the problem with the solution I came up with, so I made the scope of the project smaller and turned it into: how can I collect my own personal data so that I can take action on that data for the benefit of myself.

Building the solution

Technologies used: React, JS, HTML, shadcn, Go, Wails

Claude 3.5 Sonnet had initially released along with Claude Code and I wanted to get hands on with seeing how I could use LLMs to create coding projects since this was the first model to do a basic job coding and helping users code less of the same thing.

The decisions that I made for the architecture were the following:

  • React for the frontend
  • Go for the backend
  • Wails for the desktop packaging to be able to use the desktop app on Windows, MacOS, and Linux

The overall idea is that the desktop app would have many different applications inside it so the user could enable/disable specific apps they were using at any point in time.

For the frontend, it was easy to create a way to separate applications visually, and creating reusable components is something that I was experienced with, so once I was able to create a few reusable patterns, I was able to get Claude 3.5 Sonnet to help me with a lot of the rest. Of course, the design capabilities weren't that great so I had a lot of hand in making the user experience and user interface the way that would make me use the application on a daily basis with no friction.

For the backend, I wondered if it was possible to create a way where the user wouldn't need to make migrations on the database, so the goal was to try to make as flexible of a way for a user to create different tables in the database via the desktop app. This resulted in a database with 2 tables: a table that declared all the different types of "columns" that an application "database table" could have, and the other table where the data would live with all the "columns" declared by the first table along with the data that it would be saved in. In terms of performance, the database lookups would spend ~1-2 seconds loading due to it having to be "filtered" out, but with how much data I ended up storing (not that much), it never became an issue.

And so, with these architectural decisions made, I started creating application that I would use on a daily basis.

The result

Along with Claude 3.5 Sonnet and eventually Claude 4 Sonnet, I was able to create the desktop application that had multiple different individual applications itself:

Dashboard in light mode with daily tracking, todos, time tracking, and journaling
The Data Desktop dashboard in light mode.
Dashboard in dark mode with daily tracking, todos, time tracking, and journaling
The same dashboard in dark mode.

Time Tracker

Allows user to track time, similar to the company Toggl Track.

Time Tracker with a timer and a categorized list of recorded activities
Time Tracker: recording activities and reviewing tracked time.

Daily Tracker

Allows user to log whether or not the activity was done along with more information, similar to Habitica "dailies".

Daily Tracking calendar with scheduled metrics, goals, and daily value inputs
Daily Tracking: a calendar view of scheduled metrics and daily goals.

Todos

Allows user to have a todo list with description, categorization, and deadlines.

Todos and deadlines with priority filters, completion totals, and overdue tasks
Todos: task priorities, deadlines, and overdue items.

Metric Logger

Allows user to create metrics to log and track, connected with Daily Tracker and Metric Calendar.

Metric Logger with daily values for deep work, energy, exercise, reading, and weight
Metric Logger: recording daily values for personal metrics.

Metric Calendar

Allows user to view metrics tracked on a calendar specific view. Used for analytics.

Metric Calendar with selected habits and a monthly view of recorded metrics
Metric Calendar: selected habits and daily metric logs in a monthly view.

Experiments

Allows a user to create an experiment and connect metrics to track progress, resulting in whether or not the metrics had any effect for the experiment done.

Experiments overview with an intermittent fasting experiment, progress, and goals
Experiments: tracking progress and goals for an intermittent fasting experiment.

Journaling

Allows user to have a gratitude journal to write, creativity journal to track progress, questions to see how the user changes their answer over time, and affirmations for the user to read.

Gratitude Journal history with dated entries and daily reflections
Gratitude Journal: reviewing previous entries and daily reflections.

Daily Journal

Allows user to write down whatever they want for the day. Tried connecting it with Metric Logger and Todos to be able to automatically track those items when the user just goes through their daily writing, but results were not as good as expected.

Daily Journal preview with a formatted entry and linked daily records
Daily Journal: a formatted entry preview alongside the day’s records.

Time Planner

Allows user to figure out how they want to plan and visualize for the week.

Weekly Time Planner with scheduled activities and a category allocation summary
Time Planner: a weekly schedule and time allocation by category.

People CRM

Allows user to track activities for people in their life. Kind of like a sales CRM, but for personal relationships.

People CRM contact cards with relationship tags and birthdays
People CRM: contacts organized with relationship tags and birthdays.
People CRM contact detail with basic information, quick actions, and activity statistics
People CRM: contact information, quick actions, and activity statistics.

Body Measurements

Allows the user to track specific body measurements over time. Includes all the weight data that I've tracked over the years.

Body Measurements overview with recent weight and measurement records
Body Measurements: recent weight and measurements across eight measurement types.
Body Measurements chart showing body weight changes over time
Body Measurements: body weight trends over time.

Wealth

Allows user to manually track their financial activity, for things they buy and also their net worth over time.

Wealth transaction summary with income, expenses, and a monthly cash flow chart
Wealth: income, expenses, and monthly cash flow.
Wealth balance trends chart comparing savings and checking accounts over time
Wealth: savings and checking account balances over time.

Files

Allows user to save files specific to their financial and health areas.

DEXA Scans

Allows user to save their DEXA scan output into their own application and create their own visualizations.

DEXA Scan Tracker showing lean and fat tissue composition trends
DEXA Scan Tracker: lean and fat tissue composition trends.

Bloodwork

Allows user to save their own blood work data aggregated from multiple providers into one view

Bloodwork Tracker with lipid trends and reference ranges using fictional sample data
Bloodwork: lipid trends and reference ranges using fictional sample data.
Bloodwork Tracker showing historical lipid test values using fictional sample data
Bloodwork: historical lipid test values using fictional sample data.

What I learned

By working on this project, I became more proficient at "vibe coding", utilizing this also at work when we were allowed to. In addition, it showed me that I was able to now be able to use LLMs to create projects and products that I could envision, and steering the model to create the visualizations and features that I wanted to was as fun as coding it out myself. Overall, this project laid the foundation of what would become the "Productivity" project.