CSV-App with Change Tracking
Have you ever wished you could track changes in your CSV files more easily? In this blog, I'll walk you through how I rebuilt a CSV app that tracks changes and share my main insights.
What if I could trace who changed this cell in my CSV?
Have you ever wished you could track changes in your CSV files more easily? In this blog, I'll walk you through how I rebuilt a CSV app that tracks changes.
This work was part of my project at Opral, where I aimed to demonstrate the value of the Lix change control system for managing CSV file history. Along the way, I'll share my development process, use case scoping, and some key insights I gained.
Starting point
Before diving into my own work, I need to give credit to Jan and Jannes, who laid the foundation for the CSV prototype. They built the initial version, which was already packed with useful features such as:
Showing cell-based change diffs
Merging files
Merge previews
Review and acceptance of changes
I took over this project after they created this first version. Ultimately, I wanted to answer one question: How can this system help users manage CSV version history effectively?
Watch their Loom here.
Defining the Use Case: A History Store for CSV Files
Together with Jannes, we brainstormed the most impactful yet low-effort use case for this demo. Our goal was simple: minimize feature development while maximizing value. We landed on the concept of a history store—a way for users to manage and access different versions of their CSV files without a lot of manual comparisons.
The Scenario:
Users often edit their data in different applications
After making updates, they export their data to CSV files and store multiple versions locally.
The problem? Jumping between versions of these files to compare changes is time-consuming and tedious.
The solution we envisioned was a system that would allow users to store and access the history of their CSV files with context, avoiding the need for manual file comparisons.
How Does It Work?
The updated CSV demo allows you to create a project and import an initial CSV file. When you import a file, the system stores it in a Lix instance (read more here). If you import a new version of that CSV, the system automatically compares the old and new versions.
But here's where it gets interesting: a CSV-plugin enables the system to interpret differences semantically, meaning it doesn’t just see the files as raw text. It can understand changes within the data, making it far more powerful than a simple diff tool.
Try it Out!
If you’re curious to see this in action, we’ve created a demo dataset that showcases how this history store works with a cap table example. You can browse through the history and see how the data tells its story over time.
Click here to get to the demo.
Key Insights from the Process
While developing the history store, I uncovered a few important insights:
Create changes on a row level, not a cell level.
Context is crucial when tracking changes. Viewing changes on a cell-by-cell basis can be overwhelming and confusing without understanding the broader row-level context.People will likely use it as a store/sync system, not an editor.
The feedback we received suggested that users aren’t interested in making edits within the tool—they simply want a better way to store and track versions of their files.Displaying time-based data creates large tables.
Presenting data with a time axis as either a column or row creates sprawling tables that are difficult to navigate. By letting users “hop” through time or focus on specific rows or cells, the system can shrink the amount of data they need to deal with, making it much more manageable.
Thought Experiment: Plotting Values Over Time
This whole process led me to a fun thought experiment: what if we could plot CSV data changes over time? Imagine being able to visualize how key values have changed between versions, all without leaving the CSV interface. It would be a game changer for tracking trends in evolving datasets.
Next Steps
Diff views
Collaboration via host