Never have I ever tried to reverse engineer figjam!
However once I was done, I realized there’s a lot more within my grasp.

Hey everyone, ET1.1 has come a long way, we have a free ETL version of ET1 that’s available online, plus ET1 code on github (very trendy) and everything is created by me, founder of dev3lop, Tyler Garrett.
Each change log I will share an assortment of changes, plus information on the history, firsts, major updates, the change log, and most importantly accessibility improvements.
Accessibility – Using emerging tech to improve user experiences.
Mouse hovering and highlights enable cells/rows/column highlighting. Plus, as a node does something, those columns are highlighted. These are two important element to helping people avoid distractions and we will continue to add features like this in the future.
Improving visibility, Major Design Update
There are many nodes in ET1 that are hard to see when computer monitors are in dark mode, so we have remediated this across all of these known nodes. Like below screenshot, Any Column Filter was nearly impossible to read in dark mode. This has been remediated in ET1.1 Neon, these nodes are now darker.
Today, it’s darker. Many nodes are fixed in this design update.



Google Edge AI for Accessibility
Webcam enabled and hand monitoring software has been crafted to enable users who do not want or have a mouse/keyboard. We hope this demonstrates to other companies that creating multiplayer software is more about using imagination and your brain, rather than being stuck on the keyboard and mouse plane of thought.
While your hand menu is open, someone else can click the buttons with a mouse!
Ergonomic win
Lets face it, being on a computer constantly is bad for your back, shoulders, neck starts to hurt, arms and fingers eventually get worse. With ET1, we wanted to remove you from the “fixed computer position” enabling users to present data as a solution by modeling the solution with their fingers.
The only ETL / data visualization software provider that is using Google Edge AI to improve accessibility.
Increasing adoption
Striving to make ET1 more user friendly for people in AR, VR, and avoiding getting too technical.
This will open the audience for ET1 beyond ETL and data visualization professionals.
Building Webcam navigation and development capabilities has improved the fun factor when explaining how data works to younger generations <12 years of age, and I encourage you to give it a shot if your children are showing interest. This has become a great educational device.
Improving the ease of usage
Making the software easy to use is important and we have spent a great deal of time improving the UX in a minimal way so that it continues to remain easy to understand.
Added a menu just for learning.
At the top right, you will find a question button. This opens an expandable learning menu that helps people understand more about the nodes they are using. As this gets more comfortable we have more advanced menus under hood. But until you’re comfortable, this is the menu to use.

Added a search bar.
This will open the pro left side menu and allow you to begin to type and find nodes you’re looking to utilize, and reduces the selection of nodes based on the search. This is a big move towards a more mobile friendly ET1 solution.

Added a pro left side menu.
Click the logo and the left side menu opens. These nodes can be clicked to select the node, however the power here is dragging and dropping the nodes and this then automatically connects to any nodes on your canvas based on proximity!

History and background
From a drawing on paper when we founded DEV3LOPCOM, LLC, to a software with a login.
The early stages, it was more about understanding how to reverse engineer figjam because lets face it that application is amazing.
To transitioning to data flowing through a DAG, and aiming to perfect three nodes. Not completely convinced on a “name” for the application I opted for visual ETL builder.

Also, before this application, it was an even more simple tool, a simple csv opening application that created a data grid.

This data grid also had a wildcard filter which felt pretty exciting at the time, but I wanted the application to act more like alteryx/knime with that futuristic vibe of enso.
Past 30 days – Major updates and explainers
- Github Oauth Login
- Serverless PostgreSQL Database with Neon Input and Neon Output
- CSV Input and Github CSV Input both stream to the Neon Lake, which flows to your neon input
- Created Neon Lake, a user friendly administration UX for data sources
- linage, usage comprehension, and simple gui to enable access to where it’s in usage (unlike any other ETL app)
- Auto Saving functionality to reduce the compute/costs while developing ETL, data visualizations, serverless-ly
- Manually save, 5 minute auto Save, 1 minute auto Save, and Magic.
- Manual: lets you save the most money
- Saves every 5 minutes
- Saves every minute
- Saving when something happenings
- This system was designed to allow “client side” development in a realm that is completely free
- enabling users to leave their tab open
- a clever way to help users save money while developing in the cloud
- Manually save, 5 minute auto Save, 1 minute auto Save, and Magic.
- Charts – 1 measure and 1 dimension charts have been added to ET1.1 Neon
- Making ChartJs visualizations more accessible and data streams into these charts from the ETL process built prior
- Neon Output Node Overhaul
- Upsert – our favorite feature in postgresql is upsert because it enables a cleaner code base around updates and inserts, very user friendly for full-stack engineers, great for webhooks, but not user friendly for average data users. This tool makes it easy!
- Append – Logging? Monitoring? Tracking everything over and over? This is the way to to do it. If you’re trying to track what is happening to a file or system, append is a great way to manage your data.
- Overwrite – This will delete the data in that table, then overwrite it with whatever you pipe down stream to this node. Very powerful, likely what most people need, however could be very detrimental without the right understanding. We dive deeper here on Neon Output Node training.
Here’s a quick run down of the latest sprints:
2025-09-30 18:04 CT —
Implemented Phase 1 (display disambiguation) and Phase 2 (per-user unique lake_name) for Neon Lake
Files: netlify/functions/neon-lake.js, netlify/functions/data.js, netlify/functions/migrate.js, neonlake.html
Notes: Added user_id/lake_name columns and partial unique index; listing now prefers display_name.
2025-09-30 18:55 CT —
Updated Neon Lake rename to change friendly lake_name with uniqueness check (node_id unchanged)
Files: netlify/functions/neon-lake.js, neonlake.html (UI already displays display_name)
Notes: Returns 409 if name conflict per user; UI keeps optimistic rename and reverts on error.
2025-10-01 09:41 CT —
Addressed server auto-suffix loop typo and added client rename guards
Notes: Added logging; continuing to verify persistence across refresh in all scenarios.
2025-10-01 14:30 CT —
Preview header redesign and metadata; related workflow status and tooltips; broadened lake visibility
Files: neonlake.html; netlify/functions/neon-lake.js; netlify/functions/migrate.js
Notes: Badges for rows/created/updated/internal; related workflows show OW and removed with tooltips; GET returns created_at; visibility includes c.user_id.
2025-10-02 10:00 CT —
Unified user identity across auth flows
Files: netlify/functions/auth-callback.js, netlify/functions/auth-github-callback.js, netlify/functions/github-direct-callback.js, netlify/functions/handler-oauth-callback.js, netlify/functions/stack-auth-callback.js, netlify/functions/auth-register.js
Notes: Standardized identity using shared helper; added DB constraints to prevent future duplication.
2025-10-02 10:00 CT —
Removed Stack Auth redirects from netlify.toml
Files: netlify.toml
Notes: Verified login still works after removing redirects.
2025-10-02 10:00 CT —
Improved migrate-identity script
Files: netlify/functions/migrate.js
Notes: Enhanced script to find duplicate emails, pick keeper, repoint FKs, and delete duplicates.
– Authorization using GitHub OAuth
– Two step authentication and secure access to the application
– We don’t store passwords
– Serverless PostgreSQL (Cloud storage)
– No need to manage servers or databases
– Pay only for what you use/Secure and encrypted
– Hippa/GDPR/SOC2 compliant available (alpha)
– Inline workflows panel with counts and status
– “OW” original workflow and “removed” states (with tooltips)
– Preview header redesign
– Final display name, internal name, created/updated timestamps, row summary
– Per-user safe naming
– Unique friendly lake_name with auto-suffixing; no more duplicate csv_0
– Better visibility
– Lake list now includes user-owned caches beyond current workflow links
– Data tracking/lineage
– Track data source and workflow origin
– Discover original workflow and where sources are removed
– Dig deeper into data provenance
2025-10-12 00:20 CT —
Identity helper + canonical session subject (GitHub Direct only)
Files: netlify/functions/_utils/user.js, netlify/functions/_utils/session.js, netlify/functions/workflows.js, netlify/functions/github-direct-callback.js
Notes: Added ensureUserFromAuth (reconcile by external_id, fallback email); sessions now use canonical external_id in sub and include uid claim. Workflows uses helper to avoid duplicate users.
2025-10-12 00:22 CT —
Remove Stack Auth redirects
Files: netlify.toml
Notes: Deleted legacy /handler/* redirects that pointed to Stack Auth; app uses GitHub Direct exclusively.
2025-10-12 00:24 CT —
Migrate identity guardrails + Dedupe tool
Files: netlify/functions/migrate-identity.js, netlify/functions/dedupe-users.js
Notes: Migration detects duplicates first and returns 409 with details until dedupe is applied; dedupe-users supports dry-run and apply with transactional FK repoints (workflows, data_cache).
2025-10-12 00:25 CT —
Fix Neon Lake UUID error with external_id sessions
Files: netlify/functions/neon-lake.js
Notes: Resolve user by external_id first; only treat sub as UUID when it matches regex. Fixes “invalid input syntax for type uuid: ‘github:…'”.
2025-10-12 12:40 CT —
Neon Output: Ship UX and accurate suggestions
Files: node/element/neon_output.js, node/settings/neon_output.js, netlify/functions/neon-fetch.js
Notes: Added 🚢 Ship button next to table input (for new table creation only, keeps clickable and spins). Suggestions only show on focus and hide on blur; row counts in suggestions now use backend total.
2025-10-12 13:20 CT —
Neon tables totals and nested row counting
Files: netlify/functions/neon-tables.js, netlify/functions/neon-fetch.js
Notes: Row totals now detect nested shapes (rows: [{rows:[…] }] and rows: {rows:[…]}) using CASE expressions; totals returned as ‘total’ without inflating payload.
2025-10-12 13:26 CT —
Neon Lake queries simplified and indexed path ready
Files: netlify/functions/neon-lake.js
Notes: Resolve userId once via ensureUserFromAuth; replace broad OR predicates with direct (c.user_id = userId OR u.id = userId). Ready to drop the OR after backfilling c.user_id.
2025-10-12 13:30 CT —
Neon Input: row limit and data path verification
Files: node/settings/neon_input.js, netlify/functions/neon-fetch.js, netlify/functions/neon-tables.js
Notes: Preview limit presets (5/5k/50k/All) respected; backend clamps and returns accurate totals. Neon Output → Neon Input flow confirmed via cache_id; suggestions and counts consistent.
2025-10-13 05:35 CT —
Cosmetic collapse is UI-only (no save/recompute)
Files: ui/settings.js
Notes: Removed saveCurrentWorkflow() from toggleNodeCollapse(); emits lightweight UI event and redraws connections only.
2025-10-13 05:50 CT —
UI-only saves skip output flushing
Files: index.html (saveCurrentWorkflow)
Notes: Added skipOutputFlush option; silent saves and navigation use it to avoid flushNeonOutputs().
2025-10-13 06:10 CT —
Centralized downstream recompute helper
Files: node/nodeSettings.js, node/settings/neon_output.js
Notes: Added markDownstreamDirty(nodeId) and refactored Neon Output to use it, preventing feedback loops.
2025-10-13 06:25 CT —
Idempotent autosave for Neon Output
Files: node/settings/neon_output.js
Notes: Signature guard (table|mode|headers|rowCount|cacheId) skips redundant autosaves when nothing changed.
2025-10-13 06:40 CT —
Processed-first preview for Neon Output; stable highlights
Files: node/process/neon_output.js, node/settings/neon_output.js
Notes: Preview synthesizes IDs/is_duplicate immediately to avoid raw→processed flicker; persist and reuse system-added columns for consistent highlighting.
2025-10-13 06:55 CT —
Same-mode selection is a no-op
Files: node/settings/neon_output.js (selectWriteMode)
Notes: Selecting the current mode (e.g., Append while already Append) performs no work to prevent preview churn.
2025-10-13 07:05 CT —
Neon Input saves are UI-only
Files: node/settings/neon_input.js
Notes: Table selection and preview limit changes call saveCurrentWorkflow({ silent: true, skipOutputFlush: true }).
2025-10-13 07:20 CT —
Mode-aware notifications; toast parity
Files: node/settings/neon_output.js, ui/notificationCenter.js
Notes: Append/Overwrite hide duplicate stats; Upsert shows ✓updated/+added. Floating toast mirrors the center succinctly.
2025-10-13 08:10 CT —
Neon Output width loosened (parity with Neon Input)
Files: etls.css (.neon_output-node)
Notes: Removed universal max-width clamp; allow natural width and horizontal scroll only within data preview.
2025-10-13 08:26 CT —
Clean collapsed chip (no scrollbars; proper connection dots)
Files: etls.css (.neon_output-node, .neon_output-node.collapsed)
Notes: Node container uses overflow: visible; scrollbars limited to preview area so collapsed looks like other nodes.
2025-10-13 08:50 CT —
Unified ID generation between preview and final save
Files: node/process/neon_output.js, node/settings/neon_output.js
Notes: Preview now uses analyzeDataUniqueness/simpleHash for IDs and duplicate flags, matching final write; eliminates short→long key flicker.
2025-10-13 08:55 CT —
Duplicate policy alignment (append-only)
Files: node/settings/neon_output.js (updateNeon_outputConfig)
Notes: preserveDuplicates true only in Append; Upsert/Overwrite do not preserve. Keeps preview/save behavior consistent.
2025-10-13 09:50 CT —
Add created_at/updated_at across all write modes (save path)
Files: node/settings/neon_output.js
Notes: Append sets both timestamps for new rows; Upsert preserves created_at and stamps updated_at; Overwrite stamps updated_at for all and backfills created_at when missing.
2025-10-13 10:05 CT —
Show timestamps in preview with highlights
Files: node/process/neon_output.js, branch/branch.js, etls.css
Notes: Preview always includes created_at/updated_at; adds to impact columns so header highlights match ID column styling.
2025-10-13 11:20 CT —
Persist highlight columns for stability
Files: node/process/neon_output.js, node/settings/neon_output.js
Notes: Persist `_systemColumnsAdded` (id, is_duplicate, created_at, updated_at) so highlight survives autosave/UI updates.
2025-10-13 14:25 CT —
Append preview uses simple 1..N primary key
Files: node/process/neon_output.js
Notes: For learnability, the first upsert key renders 1..N in Append preview.
2025-10-13 15:20 CT —
Append save continues sequence from existing max
Files: node/settings/neon_output.js
Notes: Missing IDs for Append are filled by continuing from current table max; preserves any provided IDs.
2025-10-13 17:02 CT —
Node healing limited to negative positions only
Files: ui/settings.js (healNodePositions)
Notes: Only auto-corrects when x or y is < 10px; no right/bottom clamping; logging shows accurate old→new when a fix occurs.
2025-10-16 17:45 CT —
Fix charts node data preview always showing issue
Files: branch/branch.js (updateNodePreview)
Notes: Charts nodes now respect preview toggle state; only show data preview when user explicitly enables it via eye button.
2025-10-16 17:50 CT —
Add Bar Chart support to charts node
Files: node/element/charts.js, node/settings/charts.js, node/process/charts.js
Notes: Added bar chart as 4th chart type option with proper scales, aspect ratio, and Chart.js configuration.
2025-10-16 18:05 CT —
Fix bar chart legend to show dimension labels
Files: node/process/charts.js
Notes: Bar charts now show dimension legend entries (Widget A, Gadget B, etc.) instead of dataset label, matching pie chart behavior.
2025-10-16 18:10 CT —
Fix bar chart legend text color to white
Files: node/process/charts.js
Notes: Added fontColor property to custom legend generation and global Chart.defaults.color to ensure white text.
2025-10-16 18:15 CT —
Standardize bar chart size with other chart types
Files: node/process/charts.js
Notes: Set aspectRatio to 1 for all chart types for consistent square dimensions.
2025-10-16 18:25 CT —
Convert measures selection from checkboxes to dropdown
Files: node/settings/charts.js, node/element/charts.js
Notes: Charts only use one measure, so replaced multi-select checkboxes with single dropdown for better UX.
2025-10-16 18:35 CT —
Add SVG icons to chart type buttons
Files: node/element/charts.js
Notes: Added visual icons for Pie, Donut, Polar, and Bar chart buttons with vertical layout (icon above text).
2025-10-16 18:40 CT —
Combine Legend and Title checkboxes side-by-side
Files: node/element/charts.js
Notes: Removed redundant section titles and placed both checkboxes in single row for space efficiency.
2025-10-16 20:45 CT —
Add Charts category to left sidebar and main menu
Files: index.html
Notes: Added Charts section with individual chart type options for drag-and-drop creation of specific chart types.
2025-10-16 21:00 CT —
Fix chart type button color inversion and drag-and-drop selection
Files: etls.css, index.html
Notes: Selected chart buttons now show inverted colors (white bg, dark text); drag-and-drop correctly sets chart type instead of defaulting to pie.
Thanks for learning about ET1 Chang log
From advanced analytics consulting to building software, my LLC dev3lop has come a long way too.
Thanks for learning more about et1!























