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.
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!
Just my two cents.
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?
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!
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.
It may be annoying if two users are working at the same time in the same project.
Again, very cool project! :)
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)?
Editing multiple things at once (select via CTRL) needs some more options (like text centering).
Can I click upgrade and get the JSON slide deck data exported into a v2 shell?
Hopefully simpler formats like this will become the norm and the old ones can die.
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.
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.
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.
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.
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.
[0]: https://mdwiki.info
[0] https://www.ilograph.com/demo/intelligentDocumentProcessing....
[1] https://github.com/gildas-lormeau/Polyglot-HTML-ZIP-PNG
[2] https://github.com/gildas-lormeau/Polyglot-HTML-ZIP-PNG/raw/...
Example gallery: https://view.qiime2.org/
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!
- 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.
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.
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!
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.
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.
Internal IT fiefdoms everywhere should be very afraid
- 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.
One note: The home page says "Nothing phones home," but the Bento files I've examined include a cloudflareinsights.com beacon.
Will keep chipping away at this and update as I learn more.
Can you share data or show where this is so I can quickly check?
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!
Because while cool this is clearly heavily vibe coded.
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.
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.
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.
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
┌─────────────────────────────────────────┐
│ ┌─ 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.Maybe you can implement this into the project, a blank default read only (except author details) that installs as a pwa.
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.
One naive concern, though: this seems to make it very easy to spread malware. Someone could add malicious code to a compressed app, share the slide with others, and have it propagate. What are your thoughts on this?
This is the best feature.
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!
Great work! I hope to see more and more apps like this in the spirit of "Toss it all into context"
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
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).
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.
Would love to know more about how this works then? Is it more or less encrypted P2P?
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.
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?
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.
The swipe left on first slide is a feature though, its to help mobile users get back to the editor easily.
Maybe display speaker notes by default if the screen is in portrait mode?
I'll have a think on this tonight and I'm sure we can do a tablet speaker notes mode.
I just want to see the speaker notes while looking at the slides.
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.
Also, maybe a way to use sharing via LAN and strip any features that any phone remote services.
- Even works well on mobile.
- Embedding images and videos also works flawlessly.
https://grokipedia.com/page/opera_show_format
I am not sure if Opera 12 is even available for download anymore.
I hope you don't get cease and desisted by MS for mentioning PowerPoint.
Thanks for sharing and deserves a lot of Github stars!
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-...
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.
screenshare to taste
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.