Scrappy

make little apps for you and your friends

Software is important to people. Most of us spend our workdays in front of computers. We use the computer in our pocket tens if not hundreds of times every day. The apps we use are almost exclusively mass-market, sold on an app-store, made for thousands if not millions of users. Or they are enterprise apps that are custom-built for hundreds of thousands of dollars.

But there isn’t really any equivalent of home-made software — apps made lovingly by you for your friends and family. Apps that aren’t polished or flashy, but are made to your preference and help you with your particular needs.

We’re John and Pontus, and we’ve been exploring the potential of home-made software together.

We ended up creating a research prototype that we call Scrappy — a tool for making scrappy apps for just you and your friends. First and foremost, we aim to contribute a vision of what home-made software could be like. We want to make this vision as concrete as we can, by sharing a working tool and examples of apps made in it. Scrappy, in its current state, is a prototype, not a robust tool, but we hope it paints the picture we carry in our heads — of software as something that can be creative, personal, expressive. Made by anyone, for themselves and their loved ones.

What is Scrappy?

It may not be clear what “a scrappy app for you and your friends” means. What kind of apps are these? Let us paint a picture with a few examples. (We call them “Scrapps”.)

Arithmetic practice for a kid in elementary school. When outgrown, the Scrapp can be extended with harder problems.
(try on desktop)

Attendee counter for a local event. The counter’s state is shared, so the Scrapp can be used to let people in and out at multiple entrances.
(try on desktop)

Meeting cost clock, to help meetings stay on track. A Scrapp like this can be put together in 15 minutes and shared with coworkers right away.
(try on desktop)

Weekly chore tracker. Let roommates flexibly swap weeks, while making sure to track whose up next, to keep things fair.
(try on desktop)

What is it like to make an app in Scrappy?

Scrappy is an infinite canvas of interactive objects. The workflow is similar to an app such as Figma, Miro, or Google Slides — except you can attach behaviors to the objects.

You drag objects out on the canvas — a button, a textfield, a few labels. Select an object, and you can modify its attribute in an inspector panel. Certain objects, like buttons, has attributes like “when clicked” that contain javascript code. When the button is clicked, that code is run — maybe it records the contents of the textfield to a label that acts as a log. You build your app step by step: tweaking and rearranging the objects, and attaching a little bit of code to them.

There’s no better way to get a feeling for an authoring environment than to see someone use it in action. In the following videos, I’m making an attendee counter for an event.

The basics. I start out by adding a number field to track the number of attendees, and two buttons for recording people entering and exiting the venue.

Reactive formulas. Next, I add a field for the venue’s capacity, and a warning when too many people have been let in. I use a reactive formula to control the visibility of the warning and the border color of the field.

A shared, persistent world. Without any extra work, Scrappy apps are multiplayer. App state is persisted and synced, like users expect from online documents like Google Sheets or Figma.

The app is always live. There’s no distinction between editing and running. I can edit the app while a friend is using it.

Selective sharing. I make a variant of the app that’s limited to only entering and exiting people. This is done by putting a part of the app in a frame, and sharing only that frame. The limited version is still linked to the main app.

Visible, tangible data. Here’s what the Meeting Cost Clock app shown above looks like when zoomed out, revealing a common pattern in Scrapps.

Outside the shared frame are a bunch of fields used to compute the cost of the meeting. This lets me see the data while I’m working on the Scrapp, just like in a spreadsheet, which is very helpful for debugging — and it makes future tweaking or remixing easier.

Meeting cost clock internals

Why make Scrappy?

This project is driven by a desire to reimagine software creation and use. As part of a growing movement variously termed “small computing,” “casual programming”, and “home-cooked software” we want to emancipate end-users — to “empower people to express themselves without requiring them to be heavy-duty programmers,” to “liberate the programming of computers from the priesthood to the layperson”, as Bill Atkinson worded it. We want to shift the world away from mass-market, industrially-produced software toward more personal, even disposable, tools that are designed for and readily modified and adapted to specific social contexts. Above all, we want to foster a sense of agency and to ultimately contribute to “redistributing the means of software production”.

We were inspired by the simplicity of tools like Notion, tldraw, and mmm.page, but wanted to empower people with richer interactivity and programming capabilities. However, knowing the strengths and limitations of the standard visual programming paradigms of blocks (e.g. Scratch, Blockly) and nodes-and-wires (e.g. Max/MSP, Node-RED, natto, Holograph), we deliberately wanted to go down a different path. Instead, we drew direct inspiration from “media with scripting” environments, both classic systems like HyperCard, Visual Basic, and Macromedia Director, as well as contemporary platforms like Dynamicland and Minecraft, where the “media with scripting” exist in a shared online world.

Overall, our target user experience was that of a productivity tool, specifically a canvas-based tool (e.g. Figma, Miro, and tldraw)—rather than programming environments (e.g. Squeak/Smalltalk, modern IDEs) and website and app builders (e.g. Squarespace, mmm.page, Bubble). And we also wanted that kind of modern “share link”-based real-time collaboration popularized by Google Docs and Figma.

Finally, while we acknowledge the capabilities of AI-centric systems that leverage LLMs for code generation (e.g., Lovable, bolt.new, and tldraw computer), we deliberately chose to focus our design on direct manipulation and user control.

Who is Scrappy for?

As we were prototyping, it wasn’t clear who the ideal user for Scrappy was. We left this open, to see what we’d learn from building the system. Eventually, a few potential personas revealed themselves.

As Scrappy solidified, we wanted to focus on one of these personas. There’s a pull toward business use cases, since businesses are the most willing to pay for a product, but we believe the incentives there would lead us too close to existing products like Retool or LiveCode. The teaching use case is compelling, but we believe it needs a better coding experience (discoverability, better error messages, debugger) which was out of scope for us (for now). We are itching to make stuff for ourselves in Scrappy (and we are strong believers in dogfooding), but most of our projects required features that would balloon the scope.

The DIYer making home-made software is the least served by existing tools, and fits our vision of democratized computing the best. We decided this is where we could make the biggest contribution (the blue ocean strategy), and decided to make the DIYer our target persona.

Ideally, Scrappy would let anyone with basic computer literacy make a simple app and learn from there. This is not quite the case yet — some JavaScript knowledge is required. So today, the person making Scrapps from scratch is a programmer DIYer. But when a Scrapp is shared with friends, those friends can use it and remix it without needing programming experience.

What should I make in Scrappy?

Home-made, scrappy apps don’t really exist today, so most people (including us!) are not used to coming up with ideas for them. When faced with a problem that would make a great Scrapp, instead our minds go to “maybe there’s an app for that”, searching the web for one, giving up if we cannot find a good one. To start coming up with good uses for Scrappy requires a shift to a home-made mindset.

To help you build that mindset, here is an assortment of ideas for Scrapps (some of which are not feasible in the current prototype of Scrappy, but should be).

  • Custom flashcards
  • Meeting agenda manager
  • Day clock for person with dementia
  • Online workshop facilitation
  • Consulting time tracker
  • Point-based voting for a board
  • Receipt generator
  • Simple word game
  • School grade calculator
  • Interactive visual recipe
  • Social quiz game
  • Typing tutor
  • Lyric writing aids (synonyms, rhymes)
  • Board game helper
  • Wedding RSVP + seating arrangement
  • Dynamic opening hours display
  • Family bulletin board
  • Group travel planner
  • Chore → allowance calculator
  • Chess clock productivity timer

What makes a problem well-suited for Scrappy? Here are some things they have in common:

Scrappy vs mass-market apps

When faced with a “scrappy” problem — something small that would benefit from a computer — most people will think “maybe there’s an app for that”, followed by searching an app store or the Internet to look for one.

If there is no app for that, or there’s no good one, you could make your own in Scrappy. We hope you do! But often there is an app for that. If there is, it will probably be more polished than anything you can make in Scrappy. In this case, there are still reasons to consider using making your own Scrapp:

Scrappy vs AI-written apps

What about asking an LLM to make a custom, home-made app?

LLMs are getting better and better, and while they are far from able to make a full-fledged app without a lot of help from a software engineer, they can make small apps pretty reliably.

So if I can ask ChatGPT or Claude to make an app, why would I use Scrappy?

Scrappy vs HyperCard (and its successors)

HyperCard was popular among Macintosh users in the early 90s, and is often held as an exemplar of enabling home-made software and end-user programming. Decades later, there have been a number of successors to HyperCard, both commercial (HyperStudio, SuperCard, LiveCode) and non-commercial (Decker and WildCard, among a number of open-source remakes, most of which are abandonware). Most of these have been quite literal replicas of HyperCard, driven by nostalgia, down to the black-and-white graphics. None have been as successful as the original.

We wanted to create something in the spirit of HyperCard, rather than recreate HyperCard. Scrappy is different from HyperCard and its direct descendants in a few key ways:

Future directions

With our prototype, we think that we’ve been successful at proving the ideas and design principles that we started with. But there’s a lot more work to do. The number of Scrapps that can be built in a way that feel “Scrappy native” is still low. Much of the time, existing knowledge of JavaScript is required. To improve this, we need to continue work in both “lowering the floor” and “raising the ceiling”.

Lowering the floor means making things more friendly and approachable for people with little or no programming experience. For example:

Raising the ceiling means adding functionality and expressive power, letting users create more things with less effort. For example:

Conclusion

We believe computers should work for people, and dream of a future where computing, like cooking or word processing, is available to everyone. Where you can solve your own small, unique problems with small, unique apps. Where you don’t just rely on mass-market apps made by expert programmers. Where you share home-made little apps with family and friends.

Scrappy is our contribution to this dream. Each Scrapp is a live, persistent world, easily shared and remixed, closer to familiar productivity apps than alien developer tools. Like any vision, ours is incomplete, but we’ve grounded our explorations in a working prototype with examples of apps.

Try Scrappy! (desktop only)

We hope Scrappy will inspire you to further chase this particular windmill. If it does, please let us know!