PresenceJam-Desktop Svelte Themes

Presencejam Desktop

Windows desktop app syncing Spotify now-playing to Microsoft Teams status messages via Graph API (Tauri 2 + Svelte 5)

PresenceJam 2.3.4

Sync your Spotify playback to Microsoft Teams status automatically.

A solo-dev, vibe-coded desktop app for Windows and macOS.

Why?

I had a weekend, some caffeine, and a vague memory of MSN Messenger's "Now Playing" feature. This is the result. Fully vibe-coded.

Features

Feature Description
🎡 Spotify Polling Real-time track detection via Spotify Web API
πŸ“ Teams Status Sets your Teams custom status message with track info
⏱️ Smart Polling Sleeps until track ends + buffer β€” no wasted API calls
πŸ—‘οΈ Auto-Clear Automatically clears status when Spotify pauses/stops
πŸ” Secure Auth PKCE OAuth for Spotify, Device Code flow for Teams
βš™οΈ Configurable Custom status format, emoji, polling interval
πŸ–₯️ System Tray Runs silently in the background
πŸš€ Launch at Login Optional auto-start on Windows boot
πŸ›‘οΈ Profanity Filter Auto-detects and replaces profane track names with safe placeholder

How It Works

Spotify Web API  β†’  PresenceJam (polling)  β†’  Microsoft Graph API  β†’  Teams Status
     ↓                    ↓                        ↓
  "Artist -      Format with           "🎡 Artist -
   Track"          template            Track 🎧"

The app polls Spotify every few seconds while a track is playing. When the track changes, it formats a message using your custom template and pushes it to Teams via Microsoft Graph.

Screenshots

image image

Want to add screenshots? PRs welcome! See CONTRIBUTING.md.

View Description
Dashboard Shows currently playing track, Teams connection status, and sync controls
Onboarding 3-step wizard: Spotify credentials β†’ Microsoft auth β†’ Customize settings
Settings Adjust status format, polling interval, profanity filter, launch-at-login
Log Viewer Scroll through the daily rotating log files

Downloads

Download the latest release from GitHub Releases:

  • PresenceJam-2.3.0.msi β€” Windows 10/11 installer (64-bit)
  • PresenceJam-2.3.0-macos.dmg β€” macOS installer (Apple Silicon)

Quickstart

# 1. Install dependencies
npm install

# 2. Start development mode
npm run tauri dev

# 3. Build for release
npm run tauri build

For full setup instructions (Spotify app registration, Teams auth flow), see CONTRIBUTING.md.

Status Format

Customize how your Teams status looks using these placeholders:

Placeholder Output
{artist} Artist name
{track} Track name
{album} Album name
{emoji} 🎡 (playing) or ⏸️ (paused)

Default: 🎡 {artist} - {track} 🎧

Example output: 🎡 Daft Punk - One More Time 🎧

Profanity Filter

If a track or artist name contains profanity, PresenceJam replaces the entire status with a safe placeholder rather than displaying the profane content.

Setting Default Description
profanity_filter true Enable/disable the filter
profanity_placeholder Currently Listening to Spotify Placeholder text shown when content is filtered. Supports {emoji} (🎡 playing / ⏸️ paused)

How detection works:

  • 25-word curated profanity list
  • Leetspeak normalization: 1β†’i, 3β†’e, $β†’s, @β†’a, 0β†’o, 5β†’s, 7β†’t, !β†’i, |β†’i
  • Repeated-character collapse: shiiit β†’ shiit (but not excessive repeats)
  • Word-boundary detection avoids false positives (e.g., class, cocktail, assassin)
  • "fucking", "fucked", "fucker" variants are detected as profanity
  • Safe suffix words allow compounds like cocktail without blocking cock

Note: The filter currently operates on the formatted status string. A future refactor may filter raw Spotify metadata before formatting to prevent placeholder injection via custom templates. See ARCHITECTURE.md for details.

Data & Privacy

What Where How
Spotify tokens tauri-plugin-store Stored locally in credentials.json with atomic writes
Teams tokens tauri-plugin-store Stored locally in credentials.json with atomic writes
App config %APPDATA%\PresenceJam\config.json Plain JSON
Credentials %APPDATA%\PresenceJam\credentials.json Plain JSON
App logs %APPDATA%\PresenceJam\logs\ Daily rotating, 30-day retention
  • No telemetry. Nothing is sent to any server except Spotify and Microsoft directly.
  • Tokens are stored locally in your user profile β€” they never leave your machine except to authenticate with Spotify and Microsoft Graph APIs.

Troubleshooting

Having issues? Check the TROUBLESHOOTING guide for common problems and solutions.

App closes on X button

The app minimizes to the system tray β€” this is by design. Right-click the tray icon β†’ Quit to fully exit.

Spotify authorization loop

  1. Make sure your Spotify app's Redirect URIs include presencejam://callback
  2. If auto-detection fails, paste the full redirect URL from your browser manually

Teams not updating

  1. Check that you're signed into the same Microsoft account in Teams and in the app
  2. Try disconnecting and reconnecting via Settings
  3. Check the log viewer in-app for API errors

Contributing

Contributions welcome! See CONTRIBUTING.md for development setup, coding standards, and submission guidelines.

AI-generated contributions are encouraged. Use whatever tools help you build the best code β€” just make sure it compiles and follows the project patterns.

Architecture

Curious how it all works? See ARCHITECTURE.md for deep-dive diagrams and explanation.

Changelog

See CHANGELOG.md for version history.

Acknowledgements

See ACKNOWLEDGEMENTS.md for the open-source dependencies that make this project possible.

License

MIT License β€” see LICENSE for details.

Top categories

Loading Svelte Themes