Turn data and intent into dashboards, reports, slides and small applications. Plain HTML, CSS and JavaScript. No runtime framework. No platform for the reader.
A dashboard lets you choose. Slides tell it in order. A report ties text and numbers to one version. Below, all three use the same made-up dataset. See how the same numbers become three different reading experiences. What is available now?
1. Dashboard: pick a quarter
Switch quarter. CSS shows a different panel, and no new data is fetched.
The same numbers as a real file
Built by the engine · 20 rows · opens without a network
The demos above are hand-written markup. This one was made by the tool
itself, from a CSV of 20 rows carrying exactly the numbers you just saw:
five regions, four quarters, Oslo 176 million in total. Download it, open
it from your folder, change the quarter, and compare with the bars above.
A small HTML deck with three slides. Use the options, or the arrow keys when an option has focus. No JavaScript.
3. Report: a frozen Q4 extract
Made-up numbers · snapshot: this file does not update itself
Together, the five regions have made-up revenue of
NOK 140 million.
Oslo has the largest value in this extract: NOK 51 million. Follow the total to the exact table behind the claim.
The report's own Q4 extract. Independent of the quarter picked above.
Region
NOK m
Scale 0–51
Oslo
51
Bergen
34
Trondheim
21
Stavanger
20
Tromsø
14
Total
140
Reporting period
Q4 2026, made up
Data extracted
18 September 2026
Report created
18 September 2026
Version
demo-2026-v1
Source
Original, made-up demonstration numbers in this file. Not observed results or a forecast for Q4.
Method
51 + 34 + 21 + 20 + 14 = 140. One value per region, simple summing with no weighting. The bars show the same five values.
Scope
No claim about cause. No conclusion about customers, trends over time or regions outside the extract.
Version agreement
Data, text, chart, source and method are frozen together in demo-2026-v1. New numbers need a new, checked report version. Do not swap a data file and leave the old conclusion standing.
Take it with you
What you just tried lives in this file. Content, style and demos need
neither JavaScript nor a network to show in a browser. External links
open other sites only when you choose them.
One file · opens without a network · nothing for the reader to install
On the website you can use the button. If you are already reading a local
copy, use your browser's Save as to keep it as HTML.
The route onwards is the same as for any other file: download it, open it
from your folder, or put it where the reader will find it. Some previews in
collaboration tools show the content without running code, or dampen it.
So try the file the way the reader will use it before you send it. The
details and the measured limits are under the
limits.
The person who makes the file needs an AI tool that can read skills, and one
preparation done once. The person who reads the file needs no licence, no
platform, no server and nothing installed.
You have the numbers
A spreadsheet, a CSV or a query result. That is the whole input. To try it with something finished, use the sample file in the repository: examples/01-hello-dashboard/salgsdata.csv.
You install the skills
This is the only preparation, and it is done once. In RAIWork you install the Tún plugin from the marketplace. Without RAIWork, fetch the repository and run python3 setup.py, which puts the skills where your tool reads them. Nothing else has to be installed: the tools in the repository use only the Python standard library.
You ask for the file
Say what the file must contain, not how to build it. For example: "Make a dashboard of salgsdata.csv with product as the dimension, amount as the measure, and region, product and channel as filters." The skill follows the recipe and produces one HTML file with the numbers inside. The code and the skills live on GitHub.
You check it
Open the file in a browser and see that the numbers match the source. The repository has a check that does the same in a real browser and gives you a screenshot: tools/verify_dashboard.py. A clean build log is not evidence.
You share it
Put the file in the folder or send the link. The reader needs no account and no licence. What the reader actually gets, and which previews show the file without running code, is under the limits.
One core, many kinds of work
In Old Norse, tún is the place where the farm gathers. Here it is a picture of what we want to build: a place for knowledge, reuse and people who make everyday reporting tasks easier. The question is the same every time: What does this file need to carry with it?
The core we want to build is Markdown skills (recipes your AI tool follows) plus reusable HTML, CSS and JavaScript. Skills describe the task and the checks. Templates give structure. Checks look at the data, accessibility and the result. Reuse what works and spend your time on the story you want to tell.
A community around the core. We want examples, feedback and improvements from more people. A good fix for one small job can become the starting point for the next.
Content before delivery. A report, a slide deck or a chart needs a clear data agreement before we pick a file, a folder or a web address.
Provenance travels with the result. Source, method, version and time travel with the data. The reader can go from a point to the numbers behind it, in the same document.
Choose how the work lives on
A basis for a decision can be frozen. A weekly overview should be renewed. A working tool may need fresh answers. The data agreement describes what travels with the file and how the next version arrives.
Standalone file: send the whole story
Data, interface and the resources it needs all come along. The reader can take the file and open it without the data source. The next edition is built as a new file. That suits a monthly report, a meeting pack or a limited analysis.
File pair: keep the view, renew the numbers
quarter/
├── dash.html
└── data.js
In this pattern a trusted data.js sits next to dash.html. Both are available locally. The view can stay while a controlled producer makes the next data extract. The producer can be a person who picks a new CSV file, an AI skill, or a scheduled job that fetches data and writes the agreed file to the folder.
Producer → validate → replace → sync → reload
Check the schema, version, totals and data time. Replace the data file, wait for sync to finish, reload the page and check the visible data version. An old browser cache or local copy can otherwise show old numbers. This is an update on reload, not real-time delivery.
Connected folder: a small workspace
A folder picker can give a tool access to files the user chooses. Think of a project room with notes, extracts and attachments in one place, with explicit read or write permission. Browser support and simultaneous changes must be part of the agreement.
Backend: at build time or while the tool is in use
A database or an API can deliver extracts, calculations or fresh answers. Choose whether the service is used during the build or while the reader uses the result. That choice is independent of where the HTML file lives.
Backend at build time: fetch once, share an extract
An approved job fetches from a database or an API and builds the monthly report. Data and text travel with the finished file. The reader needs no contact with this backend.
Backend at open time: ask when the reader needs the answer
A connected tool can use an API to fetch the latest status or run a calculation while it is in use. Then network, sign-in, access control and error handling are part of the solution.
Delivery place: from shared file to web address
Share a file as an attachment, use a synced folder, or give the tool a web address. SharePoint and OneDrive can be used for sharing, downloading and syncing. Here are three illustrative choices for an HTTP site:
GitHub Pages: static publishing of HTML, CSS and JavaScript, for example a site of pre-built reports.
Azure Static Web Apps: static content with options for an API and authentication, for example a connected working tool.
These are platform choices to consider, not Tún adapters we have delivered. Each platform's documentation describes its features, and every setup has to be tried in its own environment. AWS, GCP and Vercel are also candidates for hosting or production jobs, and Google Drive is a candidate for file sharing. We promise support only once the specific service and delivery route have been tried.
From Markdown skill to checked result
A skill is an editable recipe: source, template, checks and approval. Here is what one can look like:
A draft SKILL.md
Illustrative draft: a small recipe that can be read, changed and reused.
---
name: report-extract
description: Make a short report from a checked data extract.
---
1. State the sources, method, data time and data version.
2. Use a version-pinned HTML template. Freeze text, numbers and chart together.
3. Validate totals and conclusions. Try keyboard, mobile and delivery place.
4. Show the whole result to a person. Get approval before publishing.
The workflow from task to approved file
Describe the task. Recipient, question, data source and what the result must not be used for.
Pick the agreement and template. File, file pair, folder or connected setup. Pin the versions of templates and tools.
Build and check. Check the schema, totals, text against data, provenance and error states.
Try it where the recipient will read it. Keyboard, mobile, local file or HTTP. Measure the file size and check dependencies.
Get human approval before publishing. Check the audience and the rights. Share the checked version.
Share an improved recipe and the next producer starts one step further along. Tún is meant to gather data agreements, reuse and checks around tools that already do the job well.
Fewer detours, more content
Think toolbox, not one big program. These are jobs we want to make easier: small deliveries that can skip needless Office and BI admin. Pick the story and let the format make it easier to use.
The sales meeting → a story the reader can explore
Let a slide deck carry interactive charts instead of screenshots. Switch the period, see the difference and go back to the numbers while the conversation goes on.
When do you need more? (the sales meeting)
PowerPoint's full editing environment and PPTX export are separate needs. Row-level security and live queries call for a suitable data solution.
The decision memo → a report with claims you can check
Let every important claim point to its exact table. The report's total of NOK 140m shows the pattern: text, numbers, chart and provenance follow the same version.
When do you need more? (the decision memo)
Simultaneous editing and change tracking may belong in a document tool. A new data version needs a new check of the report text.
“What if?” → a small scenario calculator
Let the reader change the quantity and unit price, and show the formula next to the answer: amount = quantity × unit price. With 120 units at NOK 250 each, the example comes to NOK 30,000. The assumptions are visible, not hidden in a cell.
When do you need more? (“What if?”)
Complex dependencies, Excel's calculation model and approved decision models need their own tools and tests.
“What do I do now?” → a process map with work instructions
Show the flow from intake to checking and delivery. Let each step open its responsibility, checklist and runbook in the same document. Overview first, details when they are needed.
When do you need more? (“What do I do now?”)
A readable process map is not the same as an engine that runs the process, simulates it or steers approvals.
The project update → a room for the context
Gather the timeline, milestones, decisions and attachments. Let the reader follow a decision from date to reasoning, instead of digging through meeting minutes and slides.
When do you need more? (the project update)
Joint editing, audit trails and different access levels may call for a connected project tool.
The limits that make the result trustworthy
A file cannot hold a secret. Everything that comes with it can be read by whoever gets the file. Service keys and other secrets never belong in generated HTML.
Access before sharing, control where the data is used
File permissions decide who can fetch a file before delivery. They do not take back data that has already been downloaded. Browser filters are not access control. Use a solution with enforced row-level security, for example a correctly configured Power BI, when readers should see different rows. Approve the extract and the audience before publishing.
A file, a file pair and a connection have different agreements
A file pair is not standalone. A JS side file runs code and needs a trusted producer, and arbitrary uploaded JavaScript is not safe data. Picking a folder needs explicit permission, browser support and handling of write conflicts. It does not give silent monitoring of folders. A backend at open time makes the tool connected and dependent on the network and the service's access control.
Try the real delivery route
Syncing and downloading are not the same as HTML hosting. Previews can limit content and code. Test a local file, folder or HTTP the way the recipient will use it, on mobile and with a keyboard too. Measure the file size, because “light” is not a universal performance guarantee. Check the licences of templates and tools before reuse.
This is where the toolbox starts
Available now: the core is open source. It builds dashboards, cubes with millions of rows, process diagrams and slide decks as single files, and its skills tell your AI tool how. The three demos on this page are original HTML/CSS with made-up numbers.
Every example: they open in the browser, with no sign-in and nothing
to install. jkorsvik.github.io/tun
What is left?
The skill on this page is an illustration. The calculator, project room, automatic refresh from a source, folder picker, backends and PPTX export are not delivered yet. Swapping the numbers in a file you already have is delivered (see the examples). JavaScript may give calculations and richer interaction in coming artefacts. Any paid services are not settled.
Planned: skills, templates and checks from the community.
Licence: the core is free software under AGPL v3 or later. The documents you generate are yours, under any terms you like, by the Artefact Exception. It asks two things: keep the short source line that names Tún, which does not have to be visible, and do not make the document itself a rival generator. The code is on GitHub.
Sources and inspiration from other projects
Other projects show how much a browser can carry. Here are sources for the formats, tools and ideas we can learn from. Links are ordinary navigation, and the demos above are original and use no templates from these projects.
reveal.js: HTML slides with speaker notes, vertical tracks and animation between matching elements. A presentation can be an interface, not just a row of pictures.
Marp: Markdown and CSS to HTML, PDF and PowerPoint. Normal PPTX export uses images of the slides, and editable export is experimental and has limits.
Quarto: reports with calculations at build time and HTML with embedded resources. Useful for the idea that analysis, text and data belong together.
TiddlyWiki: a wiki that can live in one HTML file. A good example of how “one file” can hold a working tool, not just a document.
Observable Framework: data loaders at build time and interactive data apps in the browser. The result is a static site, not automatically one file.
Mermaid CLI: text to diagrams as SVG. A finished diagram can be built into the report without the reader needing the diagram engine.
Want to follow along?
This is early. Do you have a small job that takes too much admin, an example to share, or an objection? Please get in touch, or open an issue on GitHub. The page has no sign-up form, tracking code or cookies. The email link opens your email program and sends nothing from this page.