Idea: Launcher App

Hey all :slight_smile:

The overall goal for this project is to make a cohesive, stable user experience for a person’s daily technological needs. This is very similar to how iPhones and Android devices come pre-loaded with practical software, but this is inside the Solid ecosystem.

The Launcher App is a collection of apps that follow a similar paradigm and can be styled cohesively. Each app intends to be an MVP of “Do one thing well” with the aim to be hackable even by novice developers.

These are the apps that I could use as a daily driver to get me out of the Google ecosystem. In no particular order:

Calendar - Planned Events
Schedule - Day at a glance
Calculator - Calculator with history a la "ribbon printing"
Minesweeper - Just a simple 8 x 8
Address Book - Addresses of contacts
Messages - Groups and private messages
Birthdays - List of upcoming birthdays for contacts
Alarm - Alert at explicitly stated time
Timer - Alert after a certain amount of time has passed
Stop Watch - Track the lapsing of time
Clock - Displays the current time in an aesthetically pleasing way
Notes - Store individual notes
Photos - Manage and view photos in albums
Maps - Search for a destination and compare it to current location
Camera - Snap photos and view the camera roll
Contacts - List of all contacts with the ability to manage
Files - File management system (I think this could just be the Pod Browser?)
Music - Music player
Videos - Video player
Podcasts - Podcast player
Books - Book reader
News - RSS reader
Library - A directory of Solid Apps and downloadable data such as books, videos, movies, podcasts, news
Routine - A personal assistant to help keep the user on their pre-defined routine for the day
Friends - A feed of updates shared by friends
Settings - Manage preferences for all apps

These apps likely have a lot of overlap on the Solid data they’ll access, but have been broken apart by how the user thinks. For example, Address Book, Birthdays, Contacts, Messages, Friends all will grab information from /profile/card#me, but their presentation is going to be different depending on the user’s current state of mind.

No development has been started on this yet. I’m happy to team up if there’s overlap with either existing projects or interests. Currently, I’ve got zero Solid expertise, but a decade of web dev & design, so any guidance is super appreciated. I know some of these apps are built or are being built, maybe there’s an opportunity to streamline them together for the sake of the user.

What do you think?

7 Likes

Hi Tractor Hacker :grin:, if you don’t want to start from scratch, your help is welcome on Popock.
Already fonctionnal :

Based on vuejs, should be compatible with react/angular components :slightly_smiling_face:

6 Likes

I like this initiative and see opportunities for collaboration with myself and other developers on Safe Network. So I made a post on the Safe developer forum to see if other Safe app developers might be might be interested:

I’m paused on my Solid on Safe work at the moment, but will check in with this when I pick it up again, in the mean time good luck!

3 Likes

Thanks @Smag0! I’ll look into Popock :slight_smile:

@happybeing thanks for the x-post! That seems like it could be an awesome cross collaboration if there’s interest

1 Like

Reviving this thread. I’ve been quiet on the forums, but I’ve been hard at work.

When I took a step back to think about writing beneficent apps-- apps that respect all people from all angles, such as their time, language, technical aptitude… I wanted something simple to both use and teach.

I’ve been working on a framework with a lean API but heavy opinions on building client-side web applications.

Without further ado, let me introduce Tag: Tag

The next step is to figure out the best way to integrate Solid. I would love any input regarding this.

To give an update on the Launcher App itself… I’ve got an app skeleton put together. This skeleton could be used as the foundation for the launcher or any other application. The approach is modeled after the signup experience for Netflix-- A few pages to onboard a person before exposing a full application.

Demo: https://thelanding.page/tag/hello-launcher.html
Source: tlp/tag - src/hello-launcher.html at main - tag - Source Code for The Landing Page

Note: The entire source fits in that single HTML file, apart from the singular dependency on tag.

Any feedback on any of this would be greatly appreciated as I’ve been operating in a vacuum for the past year :sweat_smile:

2 Likes

Hi there!

Tag seems interesting, it really embraces the Trivial Technology idea :). I only spent a couple of minutes looking at the documentation and examples, and I think I already understand most of it.

Although I have to say, personally I’m not sure if I would use this, because I think it is too simple. I’m not sure how I’d go about making a complete application, rather than small widgets. I appreciate the idea that beginners should be able to understand the code, and I’m also very much for the idea of having code in the HTML, without any compilation step. But at a glance, I’m not sure how making a large application would be manageable with this paradigm. This is just my gut reaction though, maybe I’m wrong. I’d love to eventually see people making apps with this :).

What use-case did you have in mind? It seems like it could be useful to enhance basic HTML websites, similar to what AlpineJS does. Or maybe to author web-component widgets. But I’m unsure about making “apps”. Maybe it would help to see a complete app such as TodoMVC.

I have tried it but, as a user (I didn’t look at the code), I’m not sure what that is supposed to be doing. I just see a couple of screens where I have to press “Continue” for no reason, and then I can’t launch anything.

1 Like

I like the way you’re thinking :slight_smile:. i’m not familiar with lower level code, Smalltalk, WASM, or Solid to speak to accurately to either though.

I can try though!

If Smalltalk can be compiled to WASM, Tag could serve as glue code. As I understand, the set and get functions from a tag should be usable in compiled modules via bridge functions.

If all that is true, should be just a little more adapting to get Solid playing with it all.

2 Likes

I’m very glad you brought this point up :slight_smile: I shared this concern as I was writing it. Ultimately, the simplicity forced me to write applications a certain way. I honestly don’t know enough about the meta narrative of programming, but it feels like scaling the UI horizontally vs scaling vertically.

A bit of it has to do with my sole knowledge of the internals at this point, but there are a lot of hooks to grab onto to override defaults to keep tricky things lean.

In designing the launcher application, I wanted to think about first party apps and the launcher holistically. I ended up treating each feature as an HTML leaf node. This lent itself well to creating single-file applications. These load really fast in iframes.

All that said, I souped up solid-user tag to serve as the launcher. The button toggles between an full screen iframe and an overlay. Entering the konami code pops open developer tools on the iframe layer.

Solid User Launcher Demo
Solid User Launcher Module Source

In the above module, we’re now exporting the Solid User’s Tag properties, in addition to connect and disconnect functions. This allows us to import those into other modules.

Importing Solid User’s functions a Solid Todo App

With that Todo example, we’re able to inherit Solid’s context. With that, we’re able to render the person’s name in the todo app. This is one way to build and chain more complex features.

I see software as very tribal. By decreasing the vocabulary required to communicate effectively in a medium inherently makes it more accessible. I want anyone familiar with the web to discover a new way to call into it. Anyone not familiar, I want to have code that can be easily ported or refactored into any competing alternative. I want time spent learning it was still worth every second, even if it’s not perfect.

All that said, all the launcher apps in the parent post are the use-case I’m aiming for. I want an abstraction to be able to roll my own software so that I’ll be able to come back 5, 10, 20 years down and pick up changes with only a brief refresher. And I want to be able to share that same ability with others.

Thanks for trying out the first hello-launcher, it really isn’t self explanatory as it stands right now :sweat_smile: it was mostly for me to prove out the technical hurdles I was facing, but what those are isn’t clear externally.

2 Likes

Cool find, @tag42git. It made me think of Spritely Goblins, so I posted to fediverse and mentioned @cwebber.

Update: Fixed mention, reposted on fediverse.

Oops, mucho sorry :woozy_face: Fixed it, and reposted the message too. Thanks!

1 Like

Hey all, wanted to give an update on my progress. My approach to this has been two pronged based on feedback:

  1. Create a way for building beneficient front-ends. (tag)
  2. Use that approach to build the launcher app and a todo app.

Launcher App (alpha) Launcher Demo (source)
Todo App (in the style of TodoMVC) Todo Demo (source)


With Solid being very aligned with the web ecosystem, I landed on making the launcher app very link and bookmark focused. Every person will ultimately have a different use case for the apps from the person on their left and on their right. By giving the user as much control as possible at the highest level (the launcher/operating system) we’re also able build less complicated applications in the lower levels (every app is a hyperlink in a broader ecosystem of other hyperlinked apps).

I created a PR against the TodoMVC repository with the approach built using tag to start a broader discussion of this approach compared to the myriad of others already available.

Neither the launcher, nor the todo app connect to solid at this time, but that is the next step in this process. Currently all the data is persisted in IndexedDB though, so any experimentation will persist until session data is cleared manually.

3 Likes

For posterity, instead of becoming an unpaid open source maintainer, i have just continued building with this pattern. Life is short and I decided I didn’t want to spend my time on so narrow a scope as convincing other people to do anything with their time, especially adjacent to code.

at this point, i’m using my launcher app architecture to serve all my websites from this codebase: GitHub - tylerchilds/plan98

i’m not really looking for feedback here, but closing the loop since I’m calling this experiment a personal success, as my modules all conform to documentation i’ve reduced to iambic pentameter: plan98/client/public/modules at plan98 · tylerchilds/plan98 · GitHub

Learn to Draw in Style and When to Teach it

I did generate one more related artifact during this research: A Taste of Tomorrow Today : Michael Toomim, Jackson Morgan, Mark Nadal, and Tyler Childs : Free Download, Borrow, and Streaming : Internet Archive

1 Like

a module for getting a solid user: plan98/client/public/modules/solid-user.js at plan98 · tylerchilds/plan98 · GitHub

the todo example from above: plan98/client/public/modules/solid-todolist.js at plan98 · tylerchilds/plan98 · GitHub

1 Like

to summarize my current perspective on the video:

solid is great for user land level concepts, like documents and media.
braid is great for shared application state and context, rss feeds and feature flags
gun is great for personal clipboards and ephemeral access controls, family passwords

this was the work in progress at the time when i was experimenting with peer service interoperability GitHub - tylerchilds/kickstart: My interpretation of an endless library

i’ve documented very little (not sorry, indie no funding), but i’m using deno as a task runner there with pup as a process manager. the thought is system administrators could just enable some flags and the system just works on boot, connected to systemd or otherwise. that same pattern is in use in the plan98 codebase.

when i provision a new system, i start with my dotfiles (~tychi/backpack - my dotfiles - sourcehut git) and that’ll automatically grab plan98. By default, the client that’ll appear is https://sillyz.computer, which is my personal computer (work in progress) sans the data a la solid, gun, braid, etc. the hostname itself drives the active pane and as TLDs are prohibitive, the ?world=css.ceo pattern can be used to skate the web without going cross-origin, were the correct components to be assembled in the /modules folder.

Plan98 is just a client and includes none of those as they’d be anticipated online resources, maybe from a more fleshed out version of the kickstart backend or any other service provider.

example links from the system

https://thelanding.page
https://css.ceo/paper.pocket
https://css.ceo/paper.pocket?world=sillyz.computer
https://yourlovedones.online/paper.pocket?world=1998.social
https://ncity.executiontime.pub?world=y2k38.info

1 Like