Engineering Journal
Demo Guide
Demo Guide

Node Editor Assignment

2026-05-11

TAFNE Node Editor — Demo Assignments

The Node Editor is the logic layer. Table Mode is where you work on data you can see. Lab Mode is where you clean it. The Node Editor is where you connect it — pulling from APIs, joining sheets, chaining operations into pipelines that run on demand.

How to Use This File

Each assignment carries one or more demo type tags:

Each step has a timing guide (:00), a DO line, and a SAY line. Pause here ► marks the moments where you stop and let the screen breathe.
All APIs used in these demos are free, require no authentication, and are CORS-enabled. No setup beyond the tool itself.

Assignment 1 — The Filter Pipeline

[INSTRUCTIONAL]

Audience: New users seeing the Node Editor for the first time. Duration: 4 minutes. Payoff line: "You just described a filter as a connected diagram — no formula, no query."

Before You Start

Paste this table into Table Mode and name the sheet Scores:

| Name | Score | Region | |------|-------|--------| | Alice | 88 | North | | Bob | 42 | South | | Carol | 95 | North | | Dave | 71 | East | | Eve | 38 | South | | Frank | 83 | North |

Steps

(:00) DO: Open the Node Editor tab. SAY: "This is the visual pipeline view. Instead of writing a query, you connect nodes. Each node is one operation."

(:20) DO: Click Add Node → select your Scores sheet from the sheet picker. SAY: "This node is your source — the table we just built. From here, anything we connect downstream gets this data as input."

(:40) DO: Right-click the output port of the table node → Add Filter. SAY: "A filter node. I'll configure it: column is Score, operator is >=, value is 70." Pause here ► Show the config panel clearly. Let them read the options.

(1:10) DO: Click Run (▶). SAY: "The pipeline runs. The filter node receives all six rows and drops any score below 70."

(1:25) DO: Select the Filter node → click Build Table. Pause here ► Show the output: four rows remain. Alice, Carol, Dave, Frank.

(1:35) SAY: "Bob and Eve are gone — 42 and 38 are below the threshold. The source table is untouched. The filter output is a new sheet."

Instructional Note

Explain the node graph mental model: "Every node has inputs and outputs. Data flows left to right. The source never changes — you're building a view of the data, not editing it."

If Something Goes Wrong


Assignment 2 — The Stack Join

[INSTRUCTIONAL] [MARKETING]

Audience: Anyone who has manually copy-pasted two spreadsheets together to combine quarterly data. Duration: 4 minutes. Payoff line: "Two sheets, one table. You didn't concatenate a single row by hand."

Before You Start

Create two sheets in Table Mode:

Sheet: Q1 Sales | Product | Units | Region | |---------|-------|--------| | Widget A | 120 | North | | Widget B | 85 | South |

Sheet: Q2 Sales | Product | Units | Region | |---------|-------|--------| | Widget A | 140 | North | | Widget C | 60 | East |

Steps

(:00) DO: Open Node Editor. Add the Q1 Sales sheet as a node. DO: Add the Q2 Sales sheet as a second node. SAY: "Two separate sheets. Same columns, different time periods. I need to combine them vertically."

(:30) DO: Right-click the Q1 output port → Add Join. Drag a wire from the Q2 output to the join-in-right port of the same Join node. SAY: "One Join node, two inputs. Q1 comes in on the left port, Q2 on the right."

(:55) DO: Open the Join config panel → set Mode: Stack. SAY: "Stack mode concatenates vertically. It aligns by column name, not by row position." Pause here ► Show the mode dropdown so new users can see the other join types.

(1:15) DO: Click Run → select the Join node → Build Table. Pause here ► Show the four-row result. Widget C from Q2 with blank Q1 values.

(1:30) SAY: "Four rows. Q1 rows at the top, Q2 rows below. Widget C, which only exists in Q2, gets an empty cell for the Q1 period — the column is preserved, the row is there."

(1:50) SAY: "The alternative to this was opening Excel, copying Q2, scrolling to the bottom of Q1, and pasting. Then fixing any column mismatches manually. This is the pipeline version of that — repeatable, sourceable, auditable."

Sales Follow-Up Hook

"Do you have regular report files — monthly, quarterly — that need to be combined before analysis? That's exactly the pattern this replaces."

Assignment 3 — The Live API Fetch

[MARKETING] [SALES]

Audience: Teams who work with external data sources: CRMs, third-party APIs, live feeds. Duration: 3 minutes. Payoff line: "Live data. No CSV download. No Python script. You built the connection visually."

Steps

(:00) DO: Open Node Editor → Add Node from palette → API. SAY: "An API node. I'll point it at a public endpoint — this works the same way with any REST API your company uses."

(:20) DO: Open the API config panel. DO: Set URL: https://jsonplaceholder.typicode.com/users. Method: GET. JSON Path: leave blank. SAY: "The URL is the data source. JSON Path lets me drill into nested fields. I'll leave it blank for now — it'll return all fields from the root array."

(:40) DO: Click Run on the API node alone. Show the raw output panel. Pause here ► Let the 10-row result render. Let the audience see live data appearing.

(:50) SAY: "Ten users from the API. Live data, pulled now, no file download."

(1:05) DO: Right-click the API output → Add Filter → Column: id, Operator: <=, Value: 5. DO: Click Run → select Filter → Build Table. SAY: "Filter it down to users 1 through 5. Five rows. That goes into the Sheet Manager as a live-sourced table."

(1:35) SAY: "Every time you run this pipeline, it fetches current data. The filter runs on the fresh result. If the API adds a user, your pipeline picks them up automatically."

If Something Goes Wrong

Sales Follow-Up Hook

"What API or data source does your team pull from regularly? If there's an endpoint, I can show you how to wire it into this pipeline."

Assignment 4 — The Pay Calculator

[INSTRUCTIONAL] [SALES]

Audience: Teams who compute derived columns: payroll, pricing, scoring, tax. Duration: 3 minutes. Payoff line: "A computed column on every row. No formula dragging, no copy-paste."

Before You Start

Paste this into Table Mode as sheet Payroll:

| Employee | HourlyRate | HoursWorked | |----------|------------|-------------| | Alice | 25 | 160 | | Bob | 30 | 142 | | Carol | 22 | 168 | | Dave | 35 | 155 |

Steps

(:00) DO: Open Node Editor. Add the Payroll sheet as a node. SAY: "Source data: hourly rate, hours worked. I want a third column: gross pay."

(:20) DO: Right-click the output → Add Formula. Open the Formula config. DO: Enter formula: {HourlyRate} * {HoursWorked}. Label the output column: GrossPay. SAY: "Column references go in curly braces. It reads exactly like a sentence: HourlyRate times HoursWorked, put the result in GrossPay." Pause here ► Show the formula field. Let it be readable.

(:50) DO: Click Run → select Formula node → Build Table. Pause here ► Show the output with GrossPay column populated.

(1:05) SAY: "Alice: $4,000. Bob: $4,260. Carol: $3,696. Dave: $5,425. Every row computed in one operation. The source table still shows HourlyRate and HoursWorked — GrossPay is the derived output."

(1:25) SAY: "If you get next month's hours sheet, swap the source node. Same formula, same pipeline, new results."

Instructional Note

Explain the formula reference syntax: "Curly braces wrap column names. The formula engine resolves them row by row. You can chain multiple columns: {Price} {Qty} (1 - {Discount}) is valid."

Sales Follow-Up Hook

"Is there a derived calculation your team runs manually every reporting cycle? That's what the Formula node automates."

Assignment 5 — The Full ETL Chain

[MARKETING] [SALES]

Audience: Data, engineering, or BI leads who know what ETL means and want to see it without writing code. Duration: 5 minutes. Payoff line: "Extract, filter, transform — three nodes, one pipeline. That's a lightweight ETL in a visual editor."

Steps

(:00) DO: Open Node Editor → Add API Node. DO: Set URL: https://pokeapi.co/api/v2/pokemon?limit=50. JSON Path: results. SAY: "Extracting 50 records from a live API. The JSON Path drills into the results array. This is the Extract step."

(:25) DO: Wire API output → Add Filter. DO: Filter: Column name, Operator: contains, Value: b. SAY: "Filter step. Keep only records where the name contains the letter b. In a real pipeline this would be your business rule: active accounts only, region equals North, status equals Open."

(:50) DO: Wire Filter output → Add Formula. DO: Formula: {name}. Column label: Pokemon_Name. SAY: "Transform step. In this demo I'm passing the name through — in production you'd apply a computation here: normalize the field, compute a score, apply a lookup." Pause here ► Show the three-node chain visually connected before running.

(1:10) SAY: "Three nodes. That's the ETL pattern: Extract from a source, Filter to what you need, Transform into your output format."

(1:20) DO: Click Run → select Formula node → Build Table. Pause here ► Show the filtered Pokémon list appearing as a clean table.

(1:35) SAY: "Bulbasaur. Butterfree. Beedrill. Blastoise. Filtered from 50, transformed, and available as a sheet. The whole pipeline ran in under two seconds."

(1:55) SAY: "If the API updates — new Pokémon added to the list — you hit Run again. The filter and formula re-execute on the fresh data. The pipeline is the asset, not the table."

If Something Goes Wrong

Sales Follow-Up Hook

"Does your team have a recurring pull from an external API or database? This pipeline pattern — connect, filter, transform, output — is what replaces the script that someone wrote three years ago and nobody wants to touch."

Public API Reference

All of these are CORS-enabled, free, and require no API key:

| API | URL | Returns | Good Demo Use | |-----|-----|---------|---------------| | JSONPlaceholder Users | https://jsonplaceholder.typicode.com/users | 10 users | Filter, Join | | JSONPlaceholder Posts | https://jsonplaceholder.typicode.com/posts | 100 posts | Filter by userId | | JSONPlaceholder Todos | https://jsonplaceholder.typicode.com/todos | 200 todos | Filter by completed | | Rest Countries | https://restcountries.com/v3.1/all?fields=name,population,region,capital | 250 countries | Join, Formula | | PokéAPI | https://pokeapi.co/api/v2/pokemon?limit=100 | 100 records | Filter, Formula | | Open Meteo | https://api.open-meteo.com/v1/forecast?latitude=40.71&longitude=-74.01&current_weather=true | Current weather | API to Formula | | Random Users | https://randomuser.me/api/?results=20&nat=us | 20 users | Join with local table |

Tip for demos: JSONPlaceholder is the most reliable. Use it as a fallback if any other API is slow or unavailable.
Read this post in the full Engineering Journal →