An Atlas of data points, data layers, and data flows for your web or mobile app.
Do you know where all your data is at?
NOTE: This app is relatively new and is a WIP as of 2025-09.
Includes a "DFD collaborator card assistant".
DFD: Data Flow Diagram
This app is a vanilla JavaScript web application for manually cataloging and organizing application data flows across multiple layers.
Some examples might include:
- Nuxt web app or SPA:
- Pinia stores, models, composables, middleware, plugins, browser local and session storage, backend APIs, databases, etc.
- Flutter mobile app:
- Shared Preferences, Flutter Secure Storage, models, changeNotifiers, blocs, repositories, backend APIs, databases, server instances, Firebase stores, etc.
A structured, manually curated system of record for understanding your app's data domains and flows, without drowning in ad-hoc notes or spaghetti diagrams.
Basically an “architectural logbook” for all your app's data layers.
TOC
- Three-axis categorization: What (content type), Where (layer), Who (scope)
- Note: This could potentially change based on the progress of the app, but could likely remain core pillars of relationships
- Multi-layer data tracking: stores, localStorage/sessionStorage, API endpoints, database tables
- Manual entry and curation for forest-level perspective
- Comprehensive form-based entry for all data flow elements
- Filtering and searching by layer, scope, and category
- Visual card-based display for easy browsing
- Edit and delete capabilities for maintaining accuracy
- Browser localStorage for automatic persistence
- JSON import/export for backup and sharing
- Merge or replace import options
Note: These are all susceptible to change based on the progress of the app.
- Navigate to the "Add DFDC Card" tab
- Fill in the required fields:
- Field/Key Name: The identifier for your data point
- Primary Layer: Where the data primarily lives (store, localStorage, API, etc.)
- Scope: Who owns this data (app, user, or session level)
- Add optional details:
- Data type, specific location, purpose, category
- Additional persistence locations
- Notes for conflicts or deprecation info
- Navigate to the "View Atlas" tab
- Use filters to narrow down cards by layer, scope, or category
- Click edit (✏️) or delete (🗑️) buttons on cards to manage them
- Navigate to the "Import/Export" tab
- Export: Download your complete atlas as a JSON file
- Import: Upload a previously exported JSON file
- Choose "Replace" to overwrite existing data
- Choose "Merge" to combine with existing data
Each DFDC card follows this structure:
{
"field": "nightmode",
"layer": "store",
"location": "appStateStore.nightmode",
"type": "number (0|1)",
"scope": "user",
"purpose": "UI theme preference",
"category": "user-preference",
"persists_in": [
"backend.db.users.nightmode",
"backend.api.userSettings.nightmode"
],
"notes": "Conflicts with userDataModel.globalDarkmode (deprecated)"
}- Preference: App or user configuration
- Account: Identity/authentication data
- Runtime: Temporary application state
- Feature: Domain-specific data
- Pinia Store: Vue.js state management
- Local Storage: Persistent browser storage
- Session Storage: Temporary browser storage
- Backend API: Server endpoints
- Database: Persistent server storage
- App-level: Tied to device/browser installation
- User-level: Tied to user account, portable
- Session-level: Temporary, cleared on logout
Email, password, nickname, ID, tokens - always backend-first, mirrored locally as needed.
Nightmode, transition styles - saved in DB, optionally mirrored in store, travel with user.
Domain-specific data like notes, tasks, projects - stored in DB, mirrored in store for active session.
Font size, color themes, body width - saved in localStorage or appStateStore, not tied to account.
isLoading, currentPage, lastMsg - transient only, Pinia store or sessionStorage.
- Node.js (v16 or higher)
- npm
-
Clone the repository:
git clone https://github.com/KDCinfo/dataflow-atlas.git cd dataflow-atlas -
Install dependencies:
cd app npm install -
Build the application:
npm run build
Or for development with auto-rebuild:
npm run watch
-
Serve the application: Use any web server to serve the
app/directory:- Python:
python -m http.server 8000 - Node.js:
npx serve . - VS Code: Use Live Server extension
- nginx/Apache: Point to the
app/directory
Then open
http://localhost:8000in your browser. - Python:
dataflow-atlas/
├── src/ # TypeScript source files
│ ├── types/
│ │ └── dfdc.ts # DFDC card interfaces and type guards
│ ├── utils/
│ │ └── storage.ts # localStorage utilities
│ ├── components/
│ │ ├── cardManager.ts # Card CRUD operations
│ │ └── ui.ts # UI interactions and rendering
│ └── app.ts # Main application logic
├── tsconfig.json # TypeScript configuration
├── app/
│ ├── js/ # Compiled JavaScript (generated, not in git)
│ ├── css/ # Stylesheets
│ ├── index.html # Main application
│ └── package.json # Dependencies and build scripts
└── docs/ # Documentation
Important: The app/js/ directory is generated during build and not included in version control. You must run the build process to generate the JavaScript files.
This TypeScript application requires a build step. The TypeScript source files in src/ are compiled to JavaScript in app/js/ using the build commands above.
src/ # TypeScript source files
├── types/
│ └── dfdc.ts # DFDC card interfaces and type guards
├── utils/
│ └── storage.ts # localStorage utilities with type safety
├── components/
│ ├── cardManager.ts # Card CRUD operations and validation
│ └── ui.ts # UI interactions and rendering
└── app.ts # Main application class
app/ # Deployable web application
├── index.html # Main application HTML
├── css/
│ └── styles.css # Application styles
├── js/ # Compiled TypeScript output (generated)
│ ├── app.js
│ ├── components/
│ ├── types/
│ └── utils/
└── package.json # Dependencies and build scripts
- Modern browsers with ES6+ support
- localStorage support required
- File API support for import/export
This project follows specific coding conventions:
- Comments end with periods
- Semi-colons are always used (not optional)
- Ending commas for last items in lists/maps (except one-liners)
- CSS properties ordered alphabetically unless inline dependencies exist