Show HN: Bento - An entire PowerPoint in one HTML file (edit+view+data+collab)
Posted by starfallg 2 days ago
Over the past few months, our team has been building more and more slidedecks using web frontend technologies with coding harnesses like Claude Code, but a common complaint is to make even small edits we need to edit the code either manually or via the harness.
To avoid this loop, I ended up creating Bento, a single HTML file with everything you need in a slide tool including animations and shared editing. There's no install or cloud login, everything works offline. The default deck is around 560 KB and it doesn't need to fetch anything once you got it.
Open it in a browser and then you can edit, present, print and save. Share it via email or via Airdrop and all they need is a browser to edit, present and also do live collab on the slides. Drop it in to Claude or ChatGPT to transform existing pptx files into Bento slides. There is no cloud involved, only an encrypted blind relay to allow for shared editing. The relay doesn't see any of the data.
Check it out at https://bento.page/slides/ which takes you straight to the editor.
Go to https://bento.page/guestbook/ to try out the live guestbook to experience share editing / collab.
There is also a gallery with some sample decks on the website - https://bento.page/
All the code is MIT licensed and you can find it here - https://github.com/nyblnet/bento . I used reveal.js with several other libraries (including some homegrown ones), and Claude Code.
Comments
Comment by starfallg 2 days ago
The file contains more or less two sections. There is a plain block of JSON near the top of the file which is the slide data. You can read, grep, or point a harness at it. The app itself is in a base64 blob that loads through a small shim which deflates in the browser with DecompressionStream, which keeps the package small and so that we don't need to fetch any external files at runtime. File System Access API is used for JSON writeback into the same file, which falls back to a plian download and all updates are ECDSA signed.
I started with reveal.js which served as a base, and incorporated GSAP/Flip to handle the animation. Then I added charting with echarts, but due to a number of issues with size and how the worked, I ended up re-implementing both.
What I'm most pleased about is how seamless the CRDT works. The blind relay is a small file that runs on Cloudflare Durable Objects, and all it sees are the encrypted data from the clients. Collab is off until we turn it on in the app (by starting a session by sharing by invite file), and then some sets of keys are generated. Access is handled by user key, and you can have read-only users, and also revoke live collab access by user as well.
Comment by inanutshellus 2 days ago
e.g. https://revealjs.com/#/2/1 <-- from here you can go up or down, then go right to continue the presentation.
You just make one slide deck with lightweight high-abstraction slides and depending on the audience you just... hit the down arrow. bam. now you're inside the tech slides. no nerdy tech guys? sweet, don't hit down on slide 3. Instead you're with the marketing guys, so hit down on slide 5.
Anyway - looks like you got rid of that in order to mimic Powerpoint, but... don't forget it's there. it's my favorite part of using Reveal.js!
Comment by starfallg 2 days ago
Comment by sdoering 1 day ago
Just my two cents.
Comment by starfallg 1 day ago
Comment by gcanyon 1 day ago
Comment by chrisweekly 2 days ago
Comment by gchamonlive 2 days ago
Comment by starfallg 1 day ago
Comment by RuminaAI 1 day ago
Comment by mbreese 2 days ago
When I was playing with this, I immediately thought of TiddlyWikis, which I've always been fond of, but they never took for me. However, an easily editable presentation -- that's a use case I can understand.
I couldn't see how there was a CDRT when I'm just working with a single file. I was trying to figure out where the server was. So -- this is just on for everyone? Are you concerned that your Cloudflare account will be hammered with this?
Comment by rpdillon 2 days ago
All of it just runs out of a folder on disk and can either be deployed locally or on a server behind a login. I intend to open source it, but I'm not quite proud enough yet of some of the implementation aspects to do so. Hope to do it this summer though!
Comment by Mtinie 1 day ago
Comment by starfallg 2 days ago
Cloudflare Durable Objects are pretty cheap and I'm using it like a very basic pub/sub with each deck having it's own DO. I did some calculations and it should be well within my spend limits.
Comment by francozanardi 2 days ago
It may be annoying if two users are working at the same time in the same project.
Again, very cool project! :)
Comment by starfallg 2 days ago
Comment by PhilippGille 2 days ago
You seem to have created a new GitHub account just for this project a week ago. Do you have any other GitHub accounts that enable us to see a track record of your work (maintenance, security)?
Comment by ericyd 1 day ago
Comment by moontear 1 day ago
Editing multiple things at once (select via CTRL) needs some more options (like text centering).
Comment by appplication 1 day ago
Comment by starfallg 1 day ago
Comment by chr15m 1 day ago
Comment by starfallg 1 day ago
Comment by ronyeh 2 days ago
Can I click upgrade and get the JSON slide deck data exported into a v2 shell?
Comment by starfallg 2 days ago
Comment by allisdust 2 days ago
Hopefully simpler formats like this will become the norm and the old ones can die.
Comment by starfallg 2 days ago
Comment by stackghost 2 days ago
It might not have reached legal generic status but just about any working professional will understand what you mean if you refer to "making a powerpoint deck" even if you don't use the actual Microslop product.
Comment by praveer13 2 days ago
I am personally using kimi k3 to create a mobile friendly set of games, starting from math like linear algebra to quantum physics - neurodivergent friendly, completely local state, served from github pages - to get someone interested in the field. This needs an economic incentive to exist without LLMs, because of so much different expertise needed, and time.
if anyone's interested in the games let me know - i plan to play it myself, improve it, remove bugs etc before publishing on HN.
Comment by WillAdams 2 days ago
Comment by starfallg 2 days ago
Comment by praveer13 2 days ago
https://phaseworld.play.naigap.com/
https://slope-rider.play.naigap.com
Three so far Repos -
https://github.com/praveer13/vecto
Comment by Kuyawa 1 day ago
Comment by praveer13 1 day ago
Comment by starfallg 2 days ago
Comment by praveer13 2 days ago
Comment by calebm 2 days ago
Comment by yreg 2 days ago
I don't think WP is the right place for this. It is supposed to be a tertiary source, not a place to promote concepts you want to see established.
Comment by Chilko 2 days ago
Edit: Actually 4 of the references on that wiki page link to either OPs blog, YouTube, or projects. I can see why this article was declined, however broadly an article could exist for this concept if there were other sources to build on.
Comment by habibicode 19 hours ago
Comment by nashashmi 1 day ago
Wikipedia is not a good place to promote ideas. It is a place where ideas in practice are documented. Github is a good place to promote stuff.
Comment by calebm 1 day ago
Comment by habibicode 1 day ago
Comment by Kuyawa 1 day ago
Comment by littlecranky67 2 days ago
[0]: https://mdwiki.info
Comment by habibicode 19 hours ago
Comment by billyp-rva 2 days ago
[0] https://www.ilograph.com/demo/intelligentDocumentProcessing....
Comment by RodgerTheGreat 2 days ago
Comment by Jonovono 2 days ago
Comment by calebm 2 days ago
Comment by gildas 2 days ago
[1] https://github.com/gildas-lormeau/Polyglot-HTML-ZIP-PNG
[2] https://github.com/gildas-lormeau/Polyglot-HTML-ZIP-PNG/raw/...
Comment by ebolyen 1 day ago
Example gallery: https://view.qiime2.org/
Comment by starfallg 2 days ago
Comment by analog_daddy 2 days ago
Here are some more such tools I feel you might find interesting (or most likely you might already know them) but might be worth having in a single place as a list.
Nash is stand alone note as HTML. Source: https://github.com/keepworking/nash I recommend nash for when i feel people might get overwhelmed with tiddlywiki.
htpad: Handwritten scratch pad saves stuff to SVG. Source: https://github.com/akissinger/htpad I just use this for drawing on screen since teams annotation sucks.
Minimal PWA template. Source: https://github.com/chr15m/minimal-pwa A minimal template that should ideally work, but i wasn’t able to get it working with marimo wasm notebooks.
Currently, my focus is to use python either using pyscript or hopefully just use marimo to have python apps for simple things. I don’t want to learn js and avoided this side longer than i would have wanted. But python WASM ecosystem has grown significantly to a point where i feel investing time in building these tools.
Currently, marimo is having issues with the completely offline part but hopefully, that gets fixed!
Comment by habibicode 19 hours ago
Comment by connorgurney 1 day ago
Comment by meindnoch 1 day ago
Comment by d4rkp4ttern 2 days ago
- slidev markdown-based slides, I often have a code-agent make these. https://github.com/slidevjs/slidev
- typst slides are great looking too, especially with math etc. Again easy for agents to do
One minor nit: Based on the title, I thought this was literally a tool that had something to do with PowerPoint, but "PowerPoint" is used here as a synonym for "Presentation", which is ironic/unfortunate given how many dislike PowerPoint.
Comment by starfallg 2 days ago
I thought about whether to use Slidedeck Tool in the title, but powerpoint won out mainly because how often people talk about presentations as powerpoints.
Comment by notpushkin 2 days ago
My M1 Mac froze in the end (had to hard-reboot), but that was so much fun! I guess there’s a reason Figma uses WASM and a custom renderer, though I guess your implementation should work fine for most cases (i.e. not when all of HN are trying to edit everything simultaneously :^)
Two notes:
1. It would be nice if another person changing something unrelated to what I’m doing didn’t reset the focus for me.
2. WAY too llm-y copy both on the landing page and the example deck. Your HN submission text is way easier and more pleasant to read.
And huge kudos for releasing this as FOSS!
Comment by starfallg 2 days ago
1. Yes, that's a good point that somebody else raised also. It went pass testing as I was only testing with 1 or 2 other people at once. Will fix this tonight.
2. Yeah, agreed and fair point. But I don't write well and I don't have time between day job and being a dad. Will try to fix this gradually.
Comment by notpushkin 2 days ago
2. Absolutely fair point, and it’s okay – the demo speaks for itself :-) Although if you wrote that submission text yourself, you do write pretty well! But obviously no pressure here.
Comment by bryanhogan 1 day ago
- Marp: https://marp.app/
- Slidev: https://sli.dev/
- Revealjs: https://revealjs.com/
Something more similar, based on HTML and CSS but instead based on the Svelte framework, was Animation: https://animotion.pages.dev/
It focuses on presentations that include animations, but of course it's flexible.
Comment by georgeburdell 2 days ago
Internal IT fiefdoms everywhere should be very afraid
Comment by starfallg 2 days ago
Comment by deaux 1 day ago
Comment by starfallg 1 day ago
Comment by venzaspa 1 day ago
Comment by starfallg 1 day ago
Comment by aag 2 days ago
One note: The home page says "Nothing phones home," but the Bento files I've examined include a cloudflareinsights.com beacon.
Comment by starfallg 2 days ago
Comment by starfallg 2 days ago
Will keep chipping away at this and update as I learn more.
Comment by starfallg 2 days ago
Can you share data or show where this is so I can quickly check?
Comment by Willamin 2 days ago
Agreed that the homepage should not indicate otherwise, but on the plus side with a tool like Bento you can edit the HTML file locally, remove the script tag at the bottom that does that, and never worry about that tracking again!
Comment by pembrook 2 days ago
Because while cool this is clearly heavily vibe coded.
Comment by jasonkester 1 day ago
For 6 years I’ve been reading hype about amazing productivity boosts from this stuff, but until now the expected flood of cool new products never arrived. Just lots of tools and harnesses and swarm coordination stuff to help companies spend more money on the hype cycle.
But finally somebody actually built an app and released it. I call that a milestone.
Comment by aag 2 days ago
Comment by pembrook 2 days ago
Comment by rob 2 days ago
Comment by deaux 1 day ago
Comment by aag 1 day ago
Comment by Willamin 2 days ago
A basic starter html file with an example app: https://glider-app.netlify.app/glider.html
Docs: https://glider-app.netlify.app/docs.html
The docs aren't very polished yet but it's quite usable!
It bundles a JSX transpiler, a code editor, and supports saving to a file or localstorage. It supports "ejecting" to separate the shell (handling saving files, transpiling, editing, etc) from the JSX and the JSON data.
I also threw together an iOS app in which you can save these mini apps, allowing for longer term saving of data and code edits without relying on localstorage alone, making the save/refresh loop seamless. It includes a sandbox, preventing any saved mini apps from making network calls, but allows the user to enable network usage on a per-app basis. I'd like to include more QoL features like a native editor, but haven't prioritized that yet.
Comment by starfallg 2 days ago
Comment by syhol 2 days ago
Comment by starfallg 2 days ago
Comment by jimmar 1 day ago
But...I added an image to see what options it gave me. There was no way to add alt text, which leads me to believe that accessibility was not a priority. Unless passing accessibility checks is a feature, this isn't something I could use.
Comment by starfallg 1 day ago
Comment by maxloh 1 day ago
┌─────────────────────────────────────────┐
│ ┌─ Row 1 Container ───────────────────┐ │
│ │ ┌─ 4-way padding ─────────────────┐ │ │
│ │ │ [ Text Content ] (child node) │ │ │
│ │ └─────────────────────────────────┘ │ │
│ └─────────────────────────────────────┘ │
│ ↕ gap │
│ ┌─ Row 2 Container ───────────────────┐ │
│ │ ┌─ 4-way padding ─────────────────┐ │ │
│ │ │ [ Text Content ] (child node) │ │ │
│ │ └─────────────────────────────────┘ │ │
│ └─────────────────────────────────────┘ │
│ ↕ gap │
│ ┌─ Row 3 Container ───────────────────┐ │
│ │ ┌─ 4-way padding ─────────────────┐ │ │
│ │ │ [ Text Content ] (child node) │ │ │
│ │ └─────────────────────────────────┘ │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────┘
Layouts like this are naturally expressed using CSS and a layout tree, rather than forced into hardcoded coordinates.Comment by starfallg 1 day ago
Comment by purple-leafy 2 days ago
Basically everything is client side generated from a seed - entire games and their replays get stored in a tiny url - pretty much every possible game ever fits in a version 40 QR code
It’s snake X scrabble X PvP
Comment by mklarmann 2 days ago
Comment by starfallg 2 days ago
Comment by fh67 2 days ago
Maybe you can implement this into the project, a blank default read only (except author details) that installs as a pwa.
Comment by starfallg 2 days ago
Comment by hdrz 1 day ago
Comment by trentor 2 days ago
Comment by starfallg 2 days ago
Comment by luckydata 2 days ago
Google is really shitting the bed in all the way that matters on GenAI and being an ex employee of Cloud I am not in the least surprised about it, just really sad.
Comment by dptrsa 2 days ago
Comment by starfallg 2 days ago
Comment by gatuamgb 1 day ago
Comment by tdu01 1 day ago
Comment by sdoering 1 day ago
But I am not really sure how to achive this for the secondary y-axix (I was playing with the percentages and simulating negative growth).
Comment by starfallg 1 day ago
Comment by okzgn 1 day ago
Comment by oijkuij 2 days ago
For a long time I've used draw.io for making diagrams, and found it clever that you can effectively save your document as an iframe blob of editor + file (though in their case, the editor is not stored in the file, a web connection is required to load the editor codebase. I've wished that could be the primary use case and this is basically what I'd imagined!
Comment by starfallg 2 days ago
Comment by llagerlof 1 day ago
Comment by stackghost 2 days ago
This is the best feature.
Comment by momojo 2 days ago
Great work! I hope to see more and more apps like this in the spirit of "Toss it all into context"
Comment by starfallg 2 days ago
Comment by gcanyon 1 day ago
Comment by TeeWEE 2 days ago
Bento works with a predefined schema, so you cant use any HTML library (Such as Mermaid.js) if you need it in your presentation.
But then again, often you dont need it.
Just created a presentation with Bento... I do think Reveal.js gives you more raw power. But I like bentos single html page design, and you can easily edit it manually. You cant do that with Reveal.js
Comment by starfallg 2 days ago
Comment by dannyobrien 1 day ago
Comment by starfallg 1 day ago
Comment by virajk_31 1 day ago
Comment by luanmuniz 2 days ago
Comment by starfallg 2 days ago
Comment by jmuguy 2 days ago
Comment by starfallg 2 days ago
Comment by runxel 2 days ago
Comment by mguerville 2 days ago
Comment by starfallg 2 days ago
Comment by mariozz 1 day ago
Comment by crashabr 2 days ago
Comment by ethin 2 days ago
Comment by starfallg 2 days ago
Comment by ethin 2 days ago
Comment by gcanyon 1 day ago
Comment by starfallg 1 day ago
Comment by BIGFOOT_EXISTS 2 days ago
Comment by starfallg 2 days ago
Comment by bflesch 2 days ago
Comment by starfallg 2 days ago
Comment by dogscatstrees 2 days ago
Comment by akserg 1 day ago
Comment by thecombjelly 2 days ago
Comment by starfallg 2 days ago
Comment by truetraveller 2 days ago
Comment by starfallg 2 days ago
I would love to do more by hand, but I look after a tech team inside a renewables firm, so I don't have much time between job and my preschooler.
Comment by truetraveller 2 days ago
Comment by razster 1 day ago
Comment by afro88 2 days ago
Would love to know more about how this works then? Is it more or less encrypted P2P?
Comment by starfallg 2 days ago
https://github.com/nyblnet/bento/blob/main/docs/security.md
But basically when your bento HTML first gets saved, it generates a number of keys used for managing the permissions to join the Cloudflare DO. You can then send out an invite deck with a key that allow other people to join (with their own generated keys). With this architecture, you can revoke people's access, as well as giving them only read-access to the sharing session for example.
Comment by dogscatstrees 2 days ago
Comment by starfallg 2 days ago
Comment by hokage-at-leaf 1 day ago
Comment by starfallg 1 day ago
Comment by okzgn 1 day ago
Comment by skybrian 2 days ago
For people clicking on a link to some slides that someone shared, it seems like starting out in viewing mode with a prominent edit button might be better than starting out in edit mode?
Comment by starfallg 2 days ago
Comment by skybrian 2 days ago
Also, swiping left to get back to the first slide puts me back in the editor (I went too far), and then hitting slideshow puts me back where I started so I have to swipe left again.
Comment by starfallg 2 days ago
The swipe left on first slide is a feature though, its to help mobile users get back to the editor easily.
Comment by skybrian 2 days ago
Maybe display speaker notes by default if the screen is in portrait mode?
Comment by starfallg 2 days ago
I'll have a think on this tonight and I'm sure we can do a tablet speaker notes mode.
Comment by skybrian 1 day ago
I just want to see the speaker notes while looking at the slides.
Comment by latexr 2 days ago
Comment by starfallg 2 days ago
Base64 is paired with compression to keep the size small so you can share it easily. The original version was around 1.3MB and maybe we can have a switch to output without compression. The source that generates it is all in Github.
Comment by luanmuniz 2 days ago
Comment by anoop_kumar 2 days ago
Comment by vonnieda 2 days ago
Comment by starfallg 2 days ago
Comment by yako21000 1 day ago
Comment by shaism 2 days ago
- Even works well on mobile.
- Embedding images and videos also works flawlessly.
Comment by starfallg 2 days ago
Comment by luzgool 1 day ago
Comment by Shorel 2 days ago
Comment by starfallg 2 days ago
Comment by Shorel 18 hours ago
https://grokipedia.com/page/opera_show_format
I am not sure if Opera 12 is even available for download anymore.
Comment by unixhero 1 day ago
Comment by aashir-saas 1 day ago
Comment by francozanardi 2 days ago
Comment by starfallg 2 days ago
Comment by lastramses 2 days ago
Comment by starfallg 1 day ago
Comment by jbl0ndie 2 days ago
I hope you don't get cease and desisted by MS for mentioning PowerPoint.
Comment by starfallg 2 days ago
Comment by ShipVoicedev 2 days ago
Comment by starfallg 2 days ago
Comment by el_peaton 1 day ago
Comment by luzgool 1 day ago
Comment by greenchair 2 days ago
Comment by ozhero 2 days ago
Thanks for sharing and deserves a lot of Github stars!
Comment by starfallg 2 days ago
Comment by meetingthrower 2 days ago
Comment by starfallg 2 days ago
Comment by seu 2 days ago
Comment by hilti 2 days ago
Comment by ajam1507 2 days ago
Comment by dabbz 2 days ago
Comment by rob 2 days ago
Comment by miduil 2 days ago
Comment by hilti 2 days ago
Comment by thoopring 2 days ago
Comment by koziserek 1 day ago
Comment by dushan01 2 days ago
Comment by starfallg 2 days ago
Comment by Andrey1121 1 day ago
Comment by ninjahawk1 2 days ago
Comment by starfallg 2 days ago
Comment by cseleborg 1 day ago
Just earlier today I listened to Startups for the Rest of Us podcast episode 842 [1] titled "The future of SaaS in an AI World", where host Rob Walling addresses the "SaaS is dead" question. One of his arguments is that it's rarely worth spending time on rebuilding your SaaS vendors' solutions, taking time away from your core mission. But I guess that:
1. the projects you hinted at are low-value services (e.g. CRUD web apps over DBs), and not SaaS services which have real moats, like CRM (connectors ecosystem) or email service providers (IP reputation, IT security).
2. His argument applies to startups, where you're trying to grow your valuation by growing revenue (valuation = 5-10x yearly revenue) as opposed to established corporations which usually have a higher incentive to limit costs.
You seem like a very smart person, so I'd be curious to hear your thoughts here. Were these low-value SaaS services, and is this in the context of an established business?Bento is awesome, well done!
[1] https://www.startupsfortherestofus.com/episodes/episode-842-...
Comment by RS-232 1 day ago
Also, maybe a way to use sharing via LAN and strip any features that any phone remote services.
Comment by pipipi01 1 day ago
Comment by prokopton 1 day ago
Comment by drabbiticus 1 day ago
Comment by emifo3 1 day ago
Comment by sciencesama 2 days ago
Comment by starfallg 1 day ago
Comment by schainks 2 days ago
Comment by danvesma 1 day ago
Comment by tro09182 1 day ago
Comment by fragmede 2 days ago
Comment by starfallg 2 days ago
Comment by momojo 2 days ago
Maybe I'm thinking too far ahead but I'm hoping maybe I can cover the (future?) compute costs by charging for the heavy duty ML that would have to be run non-locally but IDK. This isn't critical yet but would love to hear your musings.
Comment by starfallg 2 days ago
Comment by hokage-at-leaf 1 day ago
Comment by momojo 1 day ago
Comment by thrownaway561 1 day ago
Comment by hikariming 1 day ago
Comment by hathym 2 days ago
Comment by aravind328 1 day ago
Comment by pipipi01 1 day ago
Comment by syngrog66 2 days ago
screenshare to taste
Comment by stelardigital 1 day ago
Comment by ABO_Studios 2 days ago
Comment by ukz 2 days ago
Comment by histiq 2 days ago
Comment by convertyard 1 day ago
Comment by __grob 2 days ago
Comment by kaide666666 1 day ago
Comment by nicc047 2 days ago
Comment by GrinningFool 2 days ago