Focus: A Solid Task Manager

Great app, @NoelDeMartin, very nice work! I think starting with the Schema types, as you have is good - likely to be widely recognized. As you add more features, you’ll need to look at more specific ontologies likes calendars and events.


Nice app!

Question, can I save tasks to my Pod?

A key pattern with Solid-based RWW apps is that the WebID-Profile doc of an authenticated User Identity should inform said app about about Data Storage location. Here are some WebID-Profile doc relations that are currently associated with this pattern, via my WebID-Profile doc:


As far as I understand, as long as you login with a solid account (instead of using the offline mode), tasks will be stored on your pod, right? My understanding of “pod” is the solid server. For example, one account in

This is something I don’t know about and I think it may be related with what @pheyvaer was talking about. I’ll look into it and if I’ve got some doubts I’ll let you know. Thanks for the links :slight_smile:

1 Like

Yes, this works fine. When creating a workspace, it shows my storage and then I can choose a name for it. I can then find the data at<name>/

When I am logged in I should be able to see my WebID as a hyperlink that anchors my literal label.

The pattern for this is <a href="{webid}">{object-of-foaf-name-relation}</a>.

In addition, it would be beneficial to inform the user about default storage via pattern:

<a href="{webid}">{object-of-foaf-name-relation}</a> default <a href="{object-of-pim-storage-relation-or-ldp-inbox-etc}"> storage </a> .

Can you elaborate what’s the benefit of doing that?

About the storage, I still have to read a couple of links that have been posted on this thread to learn what storages are. Once I know them, I’ll see how to approach your suggestion :).

It takes one mouse-click or a mouseover to see what Identity your application is working with :slight_smile:

Shouldn’t that be seen with the name already? Unless you have the same name in different servers (which I guess is common).

The problem I see with placing the link on the name as it’s implemented now, is that it is displayed on the navigation drawer at all times. And I’m not sure if I’d want to add a link in there just for this reason. Maybe what I can do is include it on a “settings” panel or others that I plan to include at some point. Basically I agree that this information should be accessible somewhere within the app, but I’m not sure if the navigation drawer is the most appropriate place.

Thanks for your feedback, I’ll think about it and let you know once I’ve added this :).

1 Like

Key thing is for a WebID (an HTTP URI) to exhibit the characteristics of this kind of URI :slight_smile:

Thank you for sharing this great example and your learning experience Noel! I very much appreciate your activity log. Very useful and inspiring.

1 Like

Thanks! I’ll be starting the continuation shortly where I apply some of the feedback and I’ll look into a better way to handle the data models :).


@NoelDeMartin great job on this app! If you’re still interested in exploring other ontologies, my team works with the Common Core Ontology. I know that we have some detailed task-related terms. If you’re interested in giving them a try, I think we could add some additional features to your app (like due dates etc). Let me know if you wanna give it a shot, we’re happy to help.

1 Like

That’d be great! I’ve actually been working for a while in a dev branch adding new features, and finding ontologies is still one of the main pain points. I’ll add descriptions (already implemented) and due dates to the next version, and I wouldn’t mind changing the ontologies because there won’t be a 1.0 stable version yet.

You can check out the ontologies I’m using at the moment here:


Great, I’m checking them out now!

It’s strange for me to use foaf:name for a Task or a List… I thought it was reserved for a Person, a friend of a friend.

@NoelDeMartin It won’t be a problem at all for us to have our ontologist put something together for this app. It will be a few weeks though because he is a contractor and we are currently waiting for the budget stuff to finalize. As soon as he’s back on the job I’ll let you know and we can continue from there!

1 Like

Yes I agree it’s very strange, but quite frankly I know almost nothing about how to use proper ontologies and property names :/. I’m of course open to suggestions thou :D.

For example, it was hard enough finding an ontology that had something like “tasks”, so I ended up with these two: and but I didn’t find anything on how they name the tasks/activities so I just assumed foaf:name was ok because I’ve seen it used in many examples (yes, they were probably only examples about persons).

The only ontology I’ve found that makes sense to me is, but it didn’t have anything about tasks. I hope that I’ll be able to fix this with the help of the community :D. I was focusing on implementing the code first, but for sure before having a stable version of the app I’ll try to have this sorted out.

I’m working on an app that also uses tasks, so I’ve been trying to work out how to make it interoperable with Focus.
It seems what is needed is:

  • look up the Pod to store data in using pim:storage, because it might be somewhere other than the profile doc, e.g. for performance or bandwidth reasons
  • look up the container to store tasks in using type registration. If there is no container specified, then suggest a default and let user override it

If my app then does the same, then we’ll both be able to find the tasks wherever they are.

I pieced this together from:

Corrections are welcome.

However, it’s not clear that the type registry is a final solution for interoperability between apps. I’m not sure how it fits with: Blog post: Shaping Linked Data apps

Yeah, basically what I do for reading/creating tasks is read the containers indicated by pim:storage and I create a “Workspace” to store the tasks inside. This workspace is basically an ldp:Container with the lifecycle:TaskGroup type. You can see the schema of the data here, but it’s possible that it’ll change given that I’ve had some issues defining the types as you can see in the last comments on this thread.

I’ve just released a new version with some updates:

  • Improved UX.
  • Implemented the ability to edit and delete Workspaces, Lists and Tasks.
  • Added Task scheduling and descriptions.
  • Added markdown support for task names and descriptions.
  • Added tasks sidepanel.
  • Added soukai dependency to manage data persistence.
  • Improved documentation (including a schema of the RDF ontologies that have been used).
  • Refactored data schema.

@Smag0 I’ve updated the schema and I’m using rdfs:label for task names, thanks for the heads up :).