Skip to content

FrenchCommando/pensine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

214 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pensine logo

Pensine 🫧

A place for your thoughts.
Drag, fling, and tap your way through boards of floating marbles. Lofi vibes, gamified, no backend, no account.
Penser = to think 🇫🇷

CI Integration Artifacts Deploy Release


🚀 Grab it

Play in browser   App Store   Android (beta)   Windows installer   Linux .deb + AppImage

🌐 Web works offline as a PWA · 🍎 iOS live on the App Store · 🤖 Android is in closed test — sideload the APK, or opt in via Play · 🪟 Windows 10 1809+ / 11 ARM64 · 🐧 Linux x86_64 (glibc 2.31+)

🧪 Beta + alternative paths

  • 🍎 iOS betaTestFlight for bleeding-edge builds before they hit the App Store
  • 🪟 Windows portablezip from Releases: extract, run pensine.exe, leave no trace. Good for locked-down PCs or USB-stick installs.
  • 🐧 Linux AppImage — single-file portable: chmod +x pensine-*.AppImage && ./pensine-*.AppImage. No install, no root, any glibc-2.31+ distro. Delete the file to remove.
💡 Windows heads-up — SmartScreen + uninstall notes

Both Windows artifacts are unsigned while Microsoft Store listing is pending — SmartScreen warns on first launch; click More info → Run anyway.

Uninstall the installer build: Settings → Apps → Pensine → Uninstall (or "Uninstall Pensine" in the Start Menu folder). Removes all installed files and the .pensine file association. Your boards live under %APPDATA%\pensine\ and survive uninstall — delete that folder by hand for a clean wipe, or use the in-app About → Reset before uninstalling.

Uninstall the portable zip: just delete the extracted folder.

💡 Linux heads-up — .deb vs AppImage, uninstall

Two unsigned artifacts on every release:

  • .deb (Debian / Ubuntu / Mint / Pop!_OS) — sudo apt install ./pensine-*.deb. Installs to /usr/lib/pensine/, adds a Start menu entry + .pensine file association. Uninstall with sudo apt remove pensine. apt will warn once about "untrusted origin" — expected, the .deb isn't GPG-signed.
  • AppImage (any distro, glibc 2.31+) — single file, chmod +x and run. No install, no menu entry unless you run AppImageLauncher or similar to register it. Uninstall = delete the file.

Your boards live in your XDG data directory (typically under ~/.local/share/) and survive uninstall; use in-app About → Reset for a clean wipe.

🤖 Android

Two ways in. The sideload route is self-contained; the Play route needs an opt-in because Pensine is still in Google Play's closed test track.

⚡ Sideload the APK — no Google account required

Grab the latest .apk from Releases, open it on the phone, enable "Install unknown apps" for your browser when prompted. Done — no sign-up, no Play listing to unlock.

📱 Install via Google Play — opt in first

The Play Store listing is hidden until your Google account is on the testers list.

  1. Join the testers group with the Google account you'll use on your phone: groups.google.com/g/pensine-testers. Free, near-instant approval.
  2. Install, either:
    • 📱 On the phone: open the Play listing while signed in with the group account. Install button appears.
    • 🌐 From any browser first: open the opt-in page to flip the per-account flag, then open Play Store on the phone as usual.

⚠️ Sideload vs. Play are not interchangeable on the same device. The sideloaded APK is signed with the upload key; the Play version is re-signed by Google. If you have one installed, Android will refuse the other with a signature-conflict error — uninstall first to switch.

Pensine hasn't been promoted to Google Play's production track yet. When it is, the testers-group step goes away and the Play listing becomes a normal one-click install like the App Store.


🧩 Board types

Pick a flavor, drop your marbles in. Every board lives inside a workspace.

Board What it does
💭 Thoughts Free-form notes that expand on tap. Long-press to edit.
To-do Tap to catch in the net (done). Reset releases everything back into play.
🎴 Flashcards Tap to flip. Tap again = wrong (grows + flips back). Double-tap = correct (shrinks to net).
🪜 Steps Sequential checklist with numbered marbles, one active at a time.
⏱️ Timer Steps + stopwatch overlay. Logs a lap every advance.
Countdown Steps + per-step timer. Auto-advances when the clock hits zero.

🗂️ Workspaces

Boards live in workspaces — collections of related boards (e.g. Cooking Recipes, French Vocab, Pilot Checklists). Create, rename, recolor, and reorder them from the home screen. Export a whole workspace as a single .pensine file.

✨ Features

  • 🌓 Dark / light theme toggle
  • 🫧 Drag and fling marbles around the screen
  • 📳 Shake button to scatter everything
  • 🎨 Per-board accent color (tints title, net, and icon)
  • 🎨 Color picker and size slider per item
  • 🔀 Reorder boards by long-press drag on the home screen
  • 🏷️ Rename, duplicate, or change board type from the popup menu
  • 🗑️ Swipe to delete with undo
  • 📤 Export / import as .pensine files
  • 📲 Installable as a PWA on mobile and desktop
  • ⌨️ Full keyboard shortcuts on desktop / web

🛠️ Stack

  • Flutter / Dart — one codebase, 6 targets
  • Local storage only — no backend, no account, your boards never leave your device unless you export them

💻 Development

flutter run -d chrome    # web
flutter run -d windows   # desktop
flutter run -d macos     # desktop

Web builds deploy automatically to GitHub Pages on every push to main.

📄 License

All Rights Reserved. See LICENSE.