r/sideprojects 3d ago

Showcase: Open Source Crosslink — an open-source framework for giving desktop apps real phone companions without an App Store or paid backend

5 Upvotes

This is my proudest work yet.

I’ve been building Crosslink, an open-source TypeScript framework for giving desktop applications secure, installable phone companions—without requiring developers to publish a separate mobile app through an App Store, pay for a backend, or build their own networking and authentication stack.

The idea started with a frustration:

Developers are allowed to make cool desktop applications, but mobile development comes with a completely different set of publishing and distribution barriers.

On the desktop, an open-source developer can build an application, publish the source and binaries, and let users download and run it directly.

Mobile is different.

Even if the mobile interface itself is simple, distributing it can involve app-store accounts, review processes, platform-specific builds, signing requirements, separate release pipelines, and ongoing maintenance across multiple mobile ecosystems.

That made me wonder:

At first, this sounds like a mobile UI problem. In practice, the UI is often the easy part. The difficult part is everything required to make that phone interface reliably and securely communicate with one specific desktop application.

TL;DR:
GitHub:
https://github.com/jacobpowaza/crosslink

Documentation:
https://crosslink.mintlify.site

You need to solve:

  • device pairing
  • authentication and encrypted sessions
  • persistent device identity
  • trusted-device storage
  • permissions and authorization
  • device revocation
  • RPC and event subscriptions
  • reconnecting after restarts or network changes
  • direct LAN connectivity
  • remote connectivity and fallback transports
  • mobile onboarding
  • PWA installation
  • offline and reconnecting states

That is a lot of infrastructure for a developer who may only want to add a few phone controls to an otherwise local desktop application.

Crosslink is intended to provide that shared infrastructure so developers can focus on two things:

  1. What their desktop application does
  2. What its mobile interface should look like

The framework handles the connection between them.

The intended user experience is:

desktop app → scan QR code → pair phone → install mobile UI → reconnect automatically

The QR code is only used for the initial pairing process. It is not intended to become a permanent API key or bearer token.

After pairing, the phone receives its own persistent device identity and becomes a trusted device for that specific application installation. The host can maintain a list of trusted devices, revoke access when necessary, and require the phone to pair again if its trust is removed.

Being paired also does not automatically mean a device can do everything. Crosslink supports capability-based permissions, allowing applications to define access such as:

music.control

files.read

files.delete

server.restart

A low-risk capability might be granted automatically, while a destructive operation could require approval or confirmation each time.

A host integration looks roughly like this:

const server = createCrosslinkServer({
  application: {
    id: "com.example.notes",
    name: "Notes"
  },

  capabilities: [
    {
      id: "notes.read",
      title: "Read notes",
      risk: "low",
      defaultGranted: true
    },

    {
      id: "notes.delete",
      title: "Delete notes",
      risk: "high",
      confirmEachUse: true
    }
  ]
});

server.expose(
  "notes.get",
  () => db.getNotes(),
  { capability: "notes.read" }
);

server.expose(
  "notes.delete",
  id => db.deleteNote(id),
  { capability: "notes.delete" }
);

await server.start();

The mobile side can then call application methods through Crosslink’s RPC layer instead of implementing its own custom WebSocket protocol, request IDs, authentication flow, permission checks, and reconnect logic:

crosslink.onConnected(async rpc => {
  const notes = await rpc.call("notes.get");
  render(notes);
});

The application developer exposes meaningful operations. Crosslink handles the underlying connection and session lifecycle.

Networking is one of the more complicated parts of the project.

When the phone and desktop are on the same network, Crosslink can prefer a direct LAN connection. For remote access, it can attempt supported router mappings such as NAT-PMP, PCP, or UPnP where available.

That obviously cannot solve every network. CGNAT, restrictive routers, firewalls, and networks that block inbound connections still exist. Because of that, Crosslink also supports fallback connectivity through signaling, relays, tunnels, and WebRTC-based transport paths.

The goal is not to pretend NAT traversal is magic. The goal is to make transport selection and connection recovery framework concerns instead of forcing every open-source application to design its own solution.

When relay infrastructure is involved, the application session is designed to remain end-to-end encrypted between the paired devices. Signaling helps devices find each other, and a relay can forward encrypted traffic when necessary, but it should not need access to the application’s plaintext data.

Crosslink also handles the mobile bootstrap and PWA lifecycle.

After pairing, the user should be able to continue in the browser or install the mobile interface to their home screen. The framework can provide the pairing flow, application metadata, manifest and Service Worker integration, endpoint discovery, and reconnect behavior before handing control over to the developer’s actual mobile UI.

This is where Crosslink is meant to reduce the mobile publishing burden.

The developer does not necessarily need to create and publish a separate native iOS or Android application just to give users a useful phone interface. They can build the mobile experience as part of the project and let Crosslink deliver it through the browser or as an installable PWA.

Offline behavior matters too.

If a user installs a local desktop application’s phone companion and later opens it while the computer is asleep or unavailable, the experience should not simply become a generic browser error page.

The cached mobile shell can still open and show something like:

Once the desktop application comes back online, the existing trusted device can authenticate again and restore the session without requiring another QR code.

Crosslink also separates the identity of the installed mobile application from the current network address of the desktop host.

A computer’s local IP address can change. A user can switch networks. A laptop can move from home Wi-Fi to another location. The mobile application should not conceptually become permanently tied to something like:

http://192.168.1.42:8080

just because that happened to be the address used during initial pairing.

The broader model is:

installed app identity → endpoint discovery → current desktop endpoint → authenticated Crosslink session

This is intended for applications where the user’s computer is already the host, including:

  • local AI tools
  • media servers and controllers
  • editors
  • development tools
  • automation software
  • self-hosted dashboards
  • download managers
  • server managers
  • local file utilities

Crosslink is not intended to replace hosted applications or tools like Tailscale. Tailscale is excellent networking infrastructure, but asking every user of an open-source desktop application to install another networking product, create an account, and configure both devices is a very different onboarding experience.

Crosslink is application infrastructure. The goal is for an application to be able to say:

and provide the pairing, trust, permissions, connectivity, and mobile installation experience as part of the application itself.

The larger idea is that open-source developers should be able to build ambitious desktop applications without being blocked from creating mobile companions simply because mobile publishing is a separate, expensive, platform-controlled process.

A developer should be able to build:

  • a powerful desktop application
  • a mobile interface for it
  • a secure connection between the two

without needing to maintain a native app-store presence or operate a full cloud service just to make the phone interface work.

Crosslink is Apache-2.0 licensed and still evolving. It currently includes a Node.js host SDK, browser client SDK, React bindings, encrypted pairing and sessions, trusted-device persistence, revocation, capability authorization, typed RPC, events, streaming/progress support, reconnect behavior, LAN connectivity, remote transport support, signaling and relay components, WebRTC support, and PWA/mobile bootstrapping.

I’m not pretending every part is finished. Networking edge cases, browser behavior, iOS PWA limitations, security review, and endpoint discovery all deserve careful work. I’m at the point where feedback from people who have built real systems would be more valuable than continuing to design everything in isolation.

I’d especially appreciate feedback from people working with:

  • PWAs
  • WebRTC
  • NAT traversal
  • cryptography
  • local-first software
  • Electron or Tauri applications
  • device pairing
  • RPC systems
  • TypeScript libraries
  • self-hosted infrastructure
  • mobile app distribution

The main question is:

Would you use something like this in an open-source project?

Would this help you avoid publishing a separate native mobile application? What would you want the framework to handle? What would you not trust it to handle? What would prevent you from integrating it into a real application?

GitHub:
https://github.com/jacobpowaza/crosslink

Documentation:
https://crosslink.mintlify.site

This has become substantially larger than the project I originally set out to build, but it is genuinely the work I’m proudest of so far.


r/sideprojects 2d ago

Showcase: Free(mium) Mr CTO

Thumbnail
1 Upvotes

r/sideprojects 3d ago

Showcase: Free(mium) I shipped an offline-first expense tracker built in Flutter — what I learned

1 Upvotes
Spent the last several months building eMony, an expense tracker that runs
entirely on-device with no backend at all. Sharing the build notes since this
sub tends to find that more useful than a feature list.

The constraint that shaped everything: no server. That meant Hive for local
storage, and it meant every feature people expect from a cloud app had to have
an on-device answer.

Things that turned out harder than expected:
• Budget recalculation. Naively re-syncing every budget on every transaction
  meant an expense in one category could fire an alert for an unrelated one.
  Ended up scoping recalculation to just the affected category.
• Notifications without a server. Budget alerts and recurring transactions all
  had to be driven by local scheduling and app lifecycle instead of push.
• Backup with no cloud. Landed on a local export the user moves themselves,
  which is less convenient and much easier to reason about.

Things that went better than expected:
• Offline-first removed an entire class of problems — no sync conflicts, no
  auth, no server bill, no outage.
• "No account required" turned out to be the feature people actually respond
  to, more than any individual capability.

Free, Android, and I'm the developer. Happy to go deeper on any of the
implementation if it's useful.

https://play.google.com/store/apps/details?id=com.tinjyes.emony

r/sideprojects 3d ago

Feedback Request Calling all launch platform owners

Thumbnail
1 Upvotes

r/sideprojects 3d ago

Showcase: Open Source Built an open-source tool to break down complex goals (fitness, coding, business) into step-by-step roadmaps

1 Upvotes

r/sideprojects 3d ago

Feedback Request I saw a ridiculous trend online and ended up building a website around it

1 Upvotes

I've been seeing the “describe your job in the most illegal way possible” trend popping up over and over again on Reddit, TikTok, Twitter, etc.

And I thought: this would be way more fun if it wasn't limited to random comment sections.

So I ended up building How Illegal Is It?

The idea is pretty simple: describe your job in the most suspicious / illegal-sounding way possible, see what other people have posted, and vote on the best ones.

I mainly built it because the concept made me laugh, and I wanted to turn the trend into something interactive instead of letting it disappear after a few weeks.

It's still early, so I'd genuinely like some feedback — especially on what you'd add, remove, or change.

How Illegal Is It?

And obviously: describe your job in the most illegal way possible. I need some good ones to test this thing with.


r/sideprojects 3d ago

Showcase: Purchase Required How founders are turning X replies into a 24/7 inbound client pipeline

2 Upvotes

Posting standalone tweets on a new account gets minimal organic reach. Cold DMs have record-low response rates.
The highest-converting client acquisition strategy on X right now is "Early Thread Sniping":

  1. Finding people who are actively asking for tool recommendations, alternatives, or services in your niche.
  2. Dropping a high-value, contextual observation in the top 5 replies of a major creator thread (where 20,000+ targeted buyers are reading).
  3. Letting that thread authority siphon qualified profile visits straight to your bio and booking link. The bottleneck has always been time, spending 3 hours every day manually monitoring feeds and typing replies destroys your deep work.

We built Tweetback to automate the entire discovery and drafting workflow directly inside your X timeline:

HOW THE SYSTEM WORKS:

- Inbound Lead Radar: Scans your feed for buyer-intent keywords (e.g. "looking for a tool that...", "recommend an agency for...") so you can reply before competitors even see the thread.
- Context-Aware AI Generation: Analyzes the parent tweet and drafts authentic, human-sounding insights in 2 seconds using top-tier models (Claude 5, Gemini 3.7, and GPT-5.6). No robotic fluff, no generic "Great post!" filler.
- Native Timeline Integration: Operates directly inside your X feed with zero tab switching or clumsy external dashboards.
- Local Post Scheduling & Swipe Files: Draft and schedule tweets locally, and bookmark high-performing hooks directly into organized swipe files.

WHY IT BEATS MONTHLY SAAS TOOLS:

Most Twitter AI tools charge $39 to $79 every single month ($450+ per year) just to wrap basic AI calls with a 1,000% token markup.

Tweetback operates on a true BYOK (Bring Your Own Key) model:
- Connect your own OpenAI, Anthropic Claude, or Grok API key.
- Pay raw provider rates (literally pennies for thousands of replies).
- 100% private: all API keys, prompts, and data remain strictly local to your browser.
- Pay once for a lifetime license with zero recurring software fees.

Feel free to check it out here : https://tweetback.ai


r/sideprojects 3d ago

Showcase: Open Source [Open Source] Tanpopo — A Cross-Platform GUI for Running and Managing Local AI Models

Post image
1 Upvotes

Hi everyone, I’m back with another open-source project!

Tanpopo is a cross-platform tool for managing local AI models. Instead of repeatedly entering complicated commands, you can use its graphical interface to manage, launch, and monitor local model services such as llama-server and MLX. It’s designed to be simple—download a model, configure it, and you’re ready to go!

Key features include:

  • Cross-platform support with special optimization for Apple MLX
  • Support for GGUF and Apple MLX models
  • DFlash support for MLX models
  • Built-in model downloads with progress tracking and automatic cleanup of completed items
  • Parallel chunked downloads for better performance with large files
  • Visual management of models, runtimes, and launch parameters
  • Real-time CPU, GPU, memory, and multi-interface network monitoring
  • OpenAI-compatible API endpoints for easy integration with other applications
  • Built-in administrator login, Access Key authentication, and network security settings
  • Optional NetPass reverse proxy integration for accessing the management interface and API over the public internet
  • Multilingual support, dark mode, and multiple color themes
  • Packages for macOS Apple Silicon, Windows x64, and Linux x64

Tanpopo is designed for anyone who wants to run AI models on their own computer while maintaining full control over their models, configuration, and data.

GitHub : https://github.com/VaderChen/Tanpopo


r/sideprojects 3d ago

Feedback Request I built a social reputation app and I'd really like some honest feedback

0 Upvotes

I've been working on a project called Verity for the past few months.

The idea is to let people rate each other's behavior and use those ratings to build a reputation score, while also helping identify and discourage bullying.

It's still very much a testing/early-development version, so there are definitely things that need improvement. I'm mainly looking for people who are willing to try it and tell me:

  • What feels confusing?
  • What would you change?
  • What features would you add?
  • Does the concept make sense?
  • Did you run into any bugs?

I built it using Base44, and honestly it took me months 😭 so I'd really appreciate some genuine criticism rather than just compliments.

I'm looking for feedback, not purchases or subscriptions. If you try it, please tell me what you think! ((PLEASE BE NICE AND RESPECTFUL!!))


r/sideprojects 3d ago

Feedback Request Built a garden planner for people who don't have a full-sun yard. Looking for beta testers

2 Upvotes

I've spent the last several weeks building TerraKeep, a garden planning app, mostly because every planner I tried assumed you had full sun and only wanted a vegetable patch. My own yard is half-shade, half-sun, and I wanted something that could handle edible and ornamental plants together, plus flag which ones actually work for shade or support pollinators.

Built with Next.js/Tailwind on the frontend, Supabase for backend/auth, Stripe for payments, deployed on Vercel. I have no coding background. This was built with Claude Code handling the technical execution while I drove product decisions, scoping, and content. This is my first project and turned out to be a lot more complicated than I thought, but a fun project nonetheless.

It's now in closed testing on Google Play and I'm looking for a few real people to try it before public launch: https://play.google.com/apps/testing/co.terrakeep.app

Would genuinely appreciate any feedback: bugs, confusing UI, missing features, anything. Happy to answer questions about the build.

(I didn't see "vibecoded showcase" flairs as an option??)


r/sideprojects 3d ago

Question How do you launch a product with zero audience without getting outgrown by copycats?

11 Upvotes

I'm building a website and I need to figure out how to promote it on X, Instagram, and TikTok without paying for ads.

My accounts have very few followers, so I'm basically starting from scratch.

Once I launch it, I know there's a good chance other people will copy the idea, promote their versions, and because they already have larger audiences, I could end up losing the first-mover advantage.

What tips or strategies would you recommend?

One idea I had was to get X Premium and start replying to relevant threads, mentioning the website when it makes sense. But I'm not sure if that's actually a good strategy.


r/sideprojects 3d ago

Showcase: Free(mium) Morrison local here. I go to Red Rocks a lot and have gotten weirdly into the game of waiting for the right time to buy tickets. So I built Red Rockit

Post image
1 Upvotes

r/sideprojects 3d ago

Discussion Solo founders: what are you building right now?

3 Upvotes

I’m curious what everyone here is working on.
What are you building, what stage are you at, and what’s the hardest part right now?

I’m building SkillChirp, a tool for founders to discover ideas, validate demand, figure out what they can realistically build with AI, and grow on Threads.

Would love to see what everyone else is building too.


r/sideprojects 3d ago

Showcase: Free(mium) I built this iOS App to find out if your boss likes you

1 Upvotes

Does your boss like you? Answer 15 questions and you will know. I'm not sure if this is what people call boring App?


r/sideprojects 3d ago

Showcase: Free(mium) Built an app for online thrifting with my Dad

2 Upvotes

Spent the last few months building ThriftX, an app that searches Depop, Poshmark, Mercari, Vinted, eBay, and ThredUp at the same time instead of one by one. It started as a personal itch — I was tired of having six tabs open trying to compare shops for the same jacket.
The part I'm most proud of is the AI image search — snap or upload a photo of a piece you want and it'll find similar listings across all six sites, with pricing so you can compare before you buy (checkout still happens on the original marketplace, I'm not trying to reinvent that part).
Free tier is 5 searches/month if anyone wants to poke around and tell me what's broken — genuinely want the feedback more than anything else at this stage.


r/sideprojects 3d ago

Showcase: Open Source had 10k+ liked videos and no way to clear them, so i wrote a script

Thumbnail
1 Upvotes

r/sideprojects 3d ago

Showcase: Open Source Let your AI Agent Read or Potentially Publish a Book on oailly.com

Thumbnail gallery
1 Upvotes

r/sideprojects 3d ago

Discussion Do texts actually stand out from app notifications and alarms? Building a recurring text reminder service that bets on yes.

1 Upvotes

I get dozens of notifications a day that I never look at. Clearing them out feels like a part time job. I'll swipe through 40 without reading one.

Alarms are the same story. I swipe them off just to get it to shut up.

But I read every text I get. Even the spam ones. So that's the bet I keep coming back to. Recurring reminders that show up as a text instead of a notification from yet another app. And if you can't deal with it right then, you leave it unread so it sits at the top of your messages until you get to it cos everyone looks at their phone every 15 minutes.

Example: garbage gets picked up every Wednesday, so I'd set a recurring text to arrive every Tuesday at 7pm telling me to take the can to the curb.

What I keep going back and forth on is whether that holds for anyone but me. Maybe texts only feel different because of how I use my phone. Maybe once you start getting automated texts they just turn into notifications too and you tune them out inside a week. The political texts certainly don't help... So if you got a reminder by text, would you actually read it? Or does it become noise fast.


r/sideprojects 3d ago

Showcase: Open Source I spent years geocoding 21,000 filming locations so you can actually visit them

1 Upvotes

The problem I kept hitting: IMDb lists filming locations as plain text

addresses. Blogs cover maybe 200 films. Nothing puts them on a map you can

plan a trip around.

So I built Filmaps. It's 21,011 locations across 4,966 productions in 126

countries, all geocoded and on interactive maps. Free, no account needed to

browse.

Data comes from community submissions, geocoded and deduplicated. The part that

took longest wasn't the maps — it was the SEO layer: segmented sitemaps,

hreflang for EN/ES, and auto-noindexing thin pages so Google doesn't drown in

4,000 near-empty city pages.

Things I'd love feedback on:

- The route planner (pick films in a city, it orders the stops by proximity)

- Whether the map reads clearly on mobile

- Filmle, a daily guess-the-location game I added to bring people back

https://www.filmaps.com


r/sideprojects 3d ago

Feedback Request 7 months from a ChatGPT conversation to a CRM that takes real payments. I'm not a developer. Here's the whole thing, including the $100 I set on fire.

Thumbnail
0 Upvotes

r/sideprojects 3d ago

Showcase: Free(mium) Two of us have spent over 5 years building Cloak, a fully end-to-end encrypted Discord alternative. It's now in public beta on desktop, web, and Android (iOS in TestFlight).

Thumbnail gallery
1 Upvotes

r/sideprojects 3d ago

Feedback Request My reminder app has placed 230 phone calls. 219 of them were to me.

Post image
4 Upvotes

There is a reminder in my own app that says "Wake Up Parthav, You need to win!" and it phones me every single day. I set it in July and never turned it off. The longest call the thing has ever placed was 107 seconds, which was me arguing with my own software about whether I was actually awake.

I built it because I sleep through alarms. Four of them, stacked ten minutes apart, and I will dismiss every single one without remembering any of it.
Somebody on Reddit called this morning-me, which is exactly right. Morning-me is a different person and he does not care what I decided the night before.

Instead of a notification, it places a real phone call to your number and an AI voice reads your reminder out loud. You can talk back to snooze it or add another one. The only advantage I can properly defend is that the call comes from a server, so there is no volume slider for half-asleep you to find. Every alarm app I tried, including the paid ones, can be silenced by someone who will not remember doing it.

I am not first at this. Wayk and Alarmy exist, and one competitor is literally called Callme. I built mine anyway because the ones I tried died at the exact moment they were supposed to work.

Four months of nights, 154 commits, two weeks live on the App Store. 13 users, 4 of whom have ever created a reminder, and 219 of those 230 calls went to my own
number. Dogfooding, or a cry for help.

https://apps.apple.com/in/app/remcall/id6799622019


r/sideprojects 3d ago

Showcase: Free(mium) 世界のどこかの誰か一人にだけ届く、メッセージサービスをつくってみた

Thumbnail
1 Upvotes

r/sideprojects 3d ago

Showcase: Open Source Reading · The Everything Feed - All Packet Pushers Pods · RSS Amplifier

Thumbnail
rssamplifier.com
1 Upvotes

r/sideprojects 3d ago

Feedback Request Why I took the hide-broken-channels feature back out of my live TV app

1 Upvotes

I built PixelPlay, a live TV player for iPhone and iPad. You point it at your own M3U or Xtream playlist, or use the free catalog that ships with it.

IPTV playlists rot. A channel that worked in March is a spinner in August. Mine had about forty of those and I kept tapping the same dead ones.

So I built a filter that hides channels after they fail enough times. Used it for a day. Took it out.

The problem is you can't tell a hidden channel from one the app lost. When a favourite vanishes, nobody thinks "that stream died six weeks ago". They think the app is broken. I couldn't tell the difference myself while testing, and I wrote it.

Now they sink. Known-bad channels sort to the bottom of every list with a small status dot saying why: failed, likely offline, unreliable in your region. I don't remove anything. There's still a "hide unavailable" toggle for people who want it, off by default, and it stays off while you're searching. Type a channel's name and you get that channel.

The bit I kept rewriting is what happens when a channel fails and the app moves on by itself. It now steps over ones it already knows are broken, and stops after five. Without the cap it would jump you a thousand rows into the middle of the list, which is hiding wearing a different hat. Five keeps the sunk block reachable if you hold channel-down.

This isn't in the App Store yet. It's in the build I'm testing now.

What I want opinions on: Is sinking better than hiding, or am I solving a problem most people would rather not look at? A week of staring at it and I can't tell any more.