LinkPad is a lightweight realtime collaborative notes app for fast group writing. It was designed for classrooms, meetings, orientations, hackathons, and study groups where people need one shared writing space without accounts or setup friction.
Users enter a name, create or join a room with a short code, and type together live.
LinkPad is not trying to replace WhatsApp or Google Docs.
It is for temporary collaboration when you do not want:
- phone numbers
- logins
- groups
- cloud documents
- permanent chat history
- setup before a session
For local use, LinkPad can run over the same WiFi or mobile hotspot. For remote users, it can be hosted on a public Node server.
- Create a room with a short random room code
- Join using room code
- Enter your name before joining
- Realtime shared note syncing
- Connected user count
- Colored participant dots
- "Who is typing" indicator
- No authentication
- No database
- No AI features
- No external API dependency
- Works locally on same WiFi/hotspot
- Can also be deployed as a public Node app
- PWA app shell caching for better offline reload behavior
For the full local-network, offline-first, remote, and hybrid architecture plan, see:
docs/OFFLINE_LAN_ARCHITECTURE.md
Frontend:
- React
- Vite
- TailwindCSS
- Socket.IO Client
Backend:
- Node.js
- Express
- Socket.IO
Storage:
- In-memory only for MVP
- Restarting the server clears rooms and notes
client/
server/
README.md
package.json
render.yaml
Install dependencies:
npm run install:allBuild the React client:
npm run buildStart the Node server:
npm startOpen:
http://localhost:4000
For non-technical users, the target flow is:
Host opens LinkPad desktop app
Host creates room
App shows room code + phone invite QR/link
Phones/laptops on same WiFi open the invite link
Everyone collaborates without internet
Development command for the desktop host app:
npm run desktopBuild a Windows installer:
npm run desktop:distPhone users do not install the desktop app. They connect to the same WiFi/hotspot as the host laptop and open the invite link shown in the host app, for example:
http://192.168.0.100:4000?room=ABCD
The QR code in the room points to this LAN invite link.
This is the easiest offline/same-WiFi flow.
- Install LinkPad using the Windows installer.
- Open the LinkPad desktop app.
- Enter your name.
- Click Create Session.
- Keep the LinkPad app open.
- Share the QR code or phone invite link shown in the room.
In the Windows desktop app:
Ctrl + \
toggles LinkPad hidden/visible.
When hidden:
- the LinkPad window disappears from the screen
- the window is removed from the taskbar
- the local server keeps running
- phones/laptops already connected can keep using the room
- use
Ctrl + \again to show LinkPad
LinkPad will still appear in Task Manager because Windows shows running apps/processes there. This is expected and intentional.
- Connect to the same WiFi or mobile hotspot as the host laptop.
- Scan the QR code shown on the host laptop.
- Or open the invite link shown on the host laptop.
- Enter your name.
- Click Join Session.
Phone users do not install anything. They only need a browser.
This local file path only works on the machine where the file exists:
file:///C:/Users/2arya/Desktop/linknote/release/LinkPad%20Setup%200.1.0.exe
Do not send that file:/// path to other people. Their device cannot access your C: drive.
To share the installer with someone else, send/upload the actual file:
release/LinkPad Setup 0.1.0.exe
Good sharing options:
- GitHub Releases
- Google Drive
- WhatsApp/Telegram file share
- USB drive
- LAN file share
Because this is an unsigned local build, Windows may show a warning. For a polished public release, sign the installer with a code-signing certificate.
LinkPad now has two useful modes.
Use this when users are far away or have internet:
https://linkpad.onrender.com
How it works:
Everyone opens the Render link
Render runs the Node + Socket.IO server online
Users create/join rooms through the internet
Pros:
- Works across cities
- No install needed
- Easy public demo
Cons:
- Needs internet
- Free Render can sleep and take time to wake up
Use this when users are in the same room/class/workshop and may not have internet:
Host laptop runs LinkPad desktop app
Phones/laptops join through local WiFi link or QR
How it works:
The desktop app starts a local server on the host laptop
The app shows the host laptop's local network URL
Other devices on the same WiFi open that URL
Socket.IO syncs notes over the local network
Example local invite:
http://192.168.0.100:4000?room=ABCD
Pros:
- No internet needed
- Very low latency
- Great for classrooms, meetings, workshops, hotspots
Cons:
- Host laptop must keep LinkPad app open
- Everyone must be on the same WiFi/hotspot
- Far-away users cannot join this local link
Simple explanation:
Render mode = online server
Offline LAN mode = one laptop becomes the local server
For auto-restart while developing the backend:
npm run dev:servernpm run install:all
npm run build
npm start- Connect all devices to the same WiFi or mobile hotspot.
- Start LinkPad on the host laptop.
- Find the host laptop's IPv4 address.
Windows:
ipconfigLook for an address like:
192.168.0.171
- Other devices open:
http://YOUR_IPV4:4000
Example:
http://192.168.0.171:4000
- Enter your name.
- Host creates a room.
- Others enter their name and room code.
You can run the frontend dev server separately while developing:
Terminal 1:
npm run dev:serverTerminal 2:
npm run dev:clientOpen:
http://localhost:5173
For normal testing, prefer http://localhost:4000 after building the client.
GitHub Pages cannot run this full app because LinkPad needs a Node.js Socket.IO server.
Use Render or another Node hosting provider instead.
-
Push this project to GitHub.
-
Go to Render.
-
Create a new Web Service.
-
Connect your GitHub repository.
-
Leave the root directory blank if this repository directly contains
client,server, andpackage.json. -
Use this build command:
npm run render-build- Use this start command:
npm start- Deploy.
Render will give you a public URL like:
https://your-linkpad-app.onrender.com
Anyone with that URL can create or join rooms.
If your hosting provider supports blueprint files, use the included render.yaml.
This MVP intentionally has no database. That keeps it simple and fast, but it means:
- rooms disappear when the server restarts
- notes are not saved permanently
- all users share memory on one running server instance
For a future production version, consider:
- Yjs for conflict-safe collaboration
- Redis adapter for scaling Socket.IO across multiple instances
- optional room expiry timers
- optional export/download note feature
- PWA install support
- Electron/Tauri desktop host app
Enter name
Create or join room
See connected users
Type together live
See who is typing
Leave when done