MySolido — a local-first personal data vault (no provider needed)

Hi all,

I built MySolido — a personal data vault that runs entirely on your own PC. No cloud provider, no third-party server — just a local Solid Pod under your control.

Why I built it

There are wallets (EUDI), identity systems (Jouw.id, Athumi) and infrastructure being built across Europe. But there’s no consumer product where people actually store their stuff. MySolido fills that gap: the vault where your documents, medical records, photos, passwords and contracts live — locally, on your own machine.

What’s under the hood

  • Community Solid Server v7.1.9 running locally
  • Flask/Python frontend — browse, upload, search, organize
  • 20 pre-configured folders (identity, medical, financial, legal, etc.)
  • Full-text search across your pod
  • Windows installer (.exe) and macOS (.dmg) available

What’s new since v1.0

  • Bridge service — a read-only mirror of your local pod on a Dutch VPS (bridge.mysolido.com). Access your vault from your phone, share files over the internet. Local stays master, Bridge is read-only.
  • Share links — token-based URLs with optional password and expiry. Recipients don’t need Solid or a WebID.
  • ODRL policies — per-container usage policies (W3C Recommendation). Machine-readable rules for what recipients can do with your data.
  • Consent module — record, view and withdraw consent, conforming to W3C Data Privacy Vocabulary v2.3 and ISO/IEC TS 27560:2023.
  • Watermarking — PDF and image watermarks on shared files (“Shared with [recipient] on [date]”), applied on-the-fly via the Bridge.
  • Profile module — structured personal attributes stored as JSON-LD with DPV vocabulary. Foundation for the “Reverse Google” intention economy concept.
  • AI assistant — local RAG pipeline (Ollama + ChromaDB) that searches your documents. Hybrid mode available: local indexing + cloud API for answers. Your files never leave your PC during indexing.
  • Audit logging — full log of who accessed what and when.
  • ZIP export — backup your entire vault.

The bigger picture: Reverse Google

The long-term vision is what I call the Omgekeerde Google (Reverse Google): users store rich personal data locally, voluntarily signal purchase intentions anonymously, companies bid on those intentions, and users receive compensation. Inverting the surveillance advertising model. The profile module and consent system are the first building blocks.

Architecture

Your PC (master) → Bridge (read-only mirror) CSS :3000 CSS :3000 Flask :5000 Nginx + HTTPS .data/ (local) .data/ (synced copy)

Local is always master. The Bridge syncs via scp, secured with bcrypt password auth and Let’s Encrypt HTTPS.

Questions for the community

  1. WebID resolution: My pod runs on localhost:3000 locally and is mirrored to a public URL. What’s the recommended way to handle WebID when the same pod exists at both addresses?

  2. Sharing with non-Solid users: I’ve built token-based share links alongside WAC. Is anyone else bridging the gap between Solid access control and sharing with the non-Solid world?

  3. ODRL enforcement: I’m using ODRL policies as a juridical layer (not technical enforcement). Combined with watermarking for traceability. Curious how others approach policy-driven data sharing in practice.

Links

Feedback welcome — especially on interoperability, policy handling, and how this fits into the broader Solid ecosystem.

1 Like

This is pretty cool, it’s very similar to something I’m working on as well :).

To answer your questions, I can only help you with the first one, local/cloud interop. I still haven’t decided how I’ll do that, but I think it can be done with any standard bridging software. I have used ngrok in the past to connect to a POD running locally from a different network, as long as you configure the base url properly it should work. I’ve also seen things like Tailscale that some people use to expose local services on the internet. Though I’m not sure how easy that is to configure with CSS.

Although I will say, ideally Solid Apps should be able to work against localhost! The point of Solid is that apps connect directly from the browser to your solid server, so it shouldn’t be necessary for a 3rd party server to access a POD outside of your computer… But I’m sure you’ll find apps that don’t work like that. You can try with one of my apps, Umai, to see if it works for you.

I have tried running your project locally, and it seems to work fine but I’m not sure which credentials to introduce in the login screen :sweat_smile:. Maybe this is obvious somewhere in the interface, but I don’t understand the language. Also, if I weren’t already familiar with Solid I would know how to log in to an app. I did use the POD’s url, `127.0.0.1:3000`, but I think most people’s intuition is to use the same url they use to browse the POD. In this case, `localhost:5000`, but that didn’t seem to work.

Thanks Noel! Great to see someone working on a similar approach.

Login: The first time you run MySolido, it auto-creates a pod and credentials. The login screen asks for the CSS password that was generated during setup — it’s shown in the terminal output on first run. I realize that’s not obvious, especially with the Dutch interface. I’ll add an English language option and make the first-run experience clearer. Good feedback.

URL confusion: You’re right — localhost:5000 is the Flask UI, but the pod URL for CSS is 127.0.0.1:3000. I should make this clearer in the interface. The localhost vs 127.0.0.1 distinction also matters on Windows due to IPv6 resolution issues.

Local ↔ cloud interop: I chose a different approach than ngrok/Tailscale — a read-only Bridge service on a Dutch VPS (bridge.mysolido.com). The local pod stays master, the Bridge mirrors it. Share links work over the internet without exposing localhost. But I agree that ideally Solid apps should work against localhost directly.

I’ll check out Umai against my local pod — thanks for the suggestion. And I’ll update this post with the latest features (Bridge, ODRL policies, consent requests, AI assistant) that have been added since March.

1 Like

Quick update — MySolido v1.3.0 is out:

  • Full bilingual support (Dutch/English), switchable in settings
  • OCR provider configurable: local Tesseract or Mistral OCR (EU cloud)
  • Trust & Transparency page: Trust & Transparantie — MySolido — company info, data locations, guarantees, privacy policy
  • Auto-setup on first run

Release: Release MySolido v1.3.0 · Wim1201/mysolido · GitHub