This is a submission for Weekend Challenge: Passion Edition
What I Built
Logpose is a passion tracker disguised as a ship's compass.
Instead of a boring habit-tracking list, Logpose gives every hobby, side-project, or craft you care about its own "island" floating around a fully interactive 3D compass. Log a session β time spent, mood, a note β and the compass needle physically drifts to point at whichever island you're currently most obsessed with. Neglect an island for too long, and its light visibly fades.
The idea is inspired by the actual Log Pose from One Piece β a compass that doesn't point north, it points toward the nearest magnetic island. I used that same idea for passion: the needle doesn't point to "true north"; it points to whatever is pulling your attention right now.
Core features:
π§ Fully interactive 3D compass (React Three Fiber) with a needle that swings to your leading passion in real time
π Session logging β time, mood, and an optional note per entry
π A decay-weighted passion score, so recent activity always outweighs old activity
π An achievement system with unlockable, rarity-tiered badges per island
πΌοΈ A shareable "passion card" you can export as an image
π€ Guest mode with pre-seeded demo data, so anyone can try it instantly with zero signup
Demo:
π Live app: https://logpose-brown.vercel.app/
π₯ Video walkthrough: Youtube Live demo
πΌοΈ Screenshots:
- Landing Page:
- Dashboard:
- Islands:
- Achievement:
- Log session:
Tip: Click Continue as Guest on the live demo β it auto-seeds a few weeks of realistic session history so you can see the compass, decay, and achievements working immediately without logging anything yourself.
Code:
zainabhina05-png
/
Logpose
Logpose is a beautiful, gamified tool for tracking the hobbies, side-projects, and crafts you pour your heart into. Inspired by the "Log Pose" from One Piece which locks onto the magnetic fields of islands, this application features a fully interactive 3D compass.
Logpose π§
A 3D interactive compass that points to your greatest passions.
Built for the DEV Weekend Challenge: Passion Edition
(Category: Best use of Snowflake βοΈ)
π Landing page:
π About the Project
This project was built for the DEV Community's Weekend Challenge β Passion Edition, a hackathon focused on building tools around the theme of passion and personal growth.
Passion pulls us in different directions. Logpose is a beautiful, gamified tool for tracking the hobbies, side-projects, and crafts you pour your heart into.
Inspired by the "Log Pose" from One Piece which locks onto the magnetic fields of islands, this application features a fully interactive 3D compass. Instead of magnetic fields, you create "Islands" representing your hobbies (e.g., Coding, Painting, Running). Every time you log a session, your passion score increases, and the 3D compass needle dynamically swings to point at the island you are currently obsessedβ¦
How I Built It:
The 3D Compass:
The compass is built with React Three Fiber and @react-three/drei on top of Three.js. Each island is an icosahedron mesh positioned around a ring, with:
Emissive intensity tied to that island's normalized passion score (so the "hottest" island visibly glows brighter)
A neglect factor that dims and desaturates islands the longer it's been since their last session
A spring-animated needle (@react-spring/three) that eases toward the leading island's angle rather than snapping instantly β small detail, but it's what makes the compass feel alive instead of just a data readout
A WebGL-detection fallback: if a device can't run WebGL, the whole scene gracefully degrades to a hand-drawn SVG compass with the same data, so nobody gets a blank screen
The Passion Score & Decay Formula:
This is the actual math behind "what's burning brightest":
weighted_score = (minutes_spent / 60)
Γ (1 + mood_score / 5)
Γ (1 + max(sentiment_score, 0))
Γ exp(-0.006 Γ hours_since_logged)
The exp*(-0.006 Γ hours_ago)* term is an exponential decay β it gives the passion score a half-life of roughly 115 hours (~5 days). Log a session today and it counts fully; the same session five days from now is worth half as much, pushing you to keep coming back rather than coasting on one big burst of activity forever.
Snowflake β How It's Actually Used:
This is my submission for Best Use of Snowflake βοΈ, so here's exactly where and how it's wired in:
Snowflake is the entire application database. There's no separate ORM or Postgres instance β users, islands, and entries *all live as native Snowflake tables *(schema in scripts/setup-snowflake.sql), queried through the official snowflake-sdk Node driver via a single execute() helper **(lib/snowflake.ts) **that every API route shares.
Authentication to Snowflake uses key-pair (JWT) auth, not a static password β authenticator: "SNOWFLAKE_JWT" with a private key loaded from environment variables. This is the recommended production-grade way to connect a backend service to Snowflake instead of embedding a plaintext password.
The passion score itself is computed inside Snowflake, not in application code. The **PASSION_SCORE_SQL **query (in lib/passionScore.ts) does the full decay-weighted aggregation β the exponential decay, mood multiplier, and sentiment multiplier β as one GROUP BY island_id query executed directly against the warehouse. The Next.js API route just shapes the result for the frontend.
Real sentiment analysis via Snowflake Cortex. Every time you log a session note, it's sent through SNOWFLAKE.CORTEX.SENTIMENT() β Snowflake's built-in LLM-powered sentiment function β right inside the SQL, returning a score from -1 to 1. That score then feeds directly into the passion formula above (1 + max(sentiment_score, 0)), so writing "shipped a feature I'm genuinely proud of!" measurably boosts that island's score compared to a flat, unenthusiastic note. This turned Logpose from a simple time-tracker into something that also listens to how you felt about the work.
Least-privilege role setup. The setup script creates a dedicated logpose_app_role with only the grants it needs (USAGE on the warehouse/database/schema, CREATE TABLE, and SELECT/INSERT/UPDATE/DELETE on the app's own tables), plus the SNOWFLAKE.CORTEX_USER database role specifically to unlock Cortex β rather than running everything as ACCOUNTADMIN.
Authentication:
Auth is fully custom β no third-party auth provider. Passwords are hashed with bcryptjs, sessions are signed JWTs (via jose) stored in secure, HTTP-only cookies, and a Next.js proxy/middleware layer protects both pages (/dashboard) and API routes (/api/islands, /api/entries, etc.) by verifying the JWT before anything touches the database.
Achievements & Gamification:
An in-browser achievement engine checks conditions (first log, streaks, hours milestones, island count, mood) after every session and surfaces unlocked badges in an animated toast, plus a persistent "bounty scroll" per island so you can revisit what you've earned.
Prize Categories:
Submitting to: Best Use of Snowflake βοΈ
Snowflake isn't just storage here β it's the compute layer for the core feature (the decay-weighted passion score is computed in-warehouse) and the *AI layer *(Cortex Sentiment scores every note you write), both gated behind a properly scoped, least-privilege role.
#weekendchallenge #Devchallenge

Top comments (8)
Love the attention to detail here. The decay-weighted scoring, Snowflake Cortex sentiment analysis, JWT auth, and the WebGL fallback show you thought beyond just making a cool UI. Wishing you the best for the Weekend Challenge!
Wastay k na huiyaaa
SOOO GOOOD!! π₯π₯π₯π₯π₯
Love the one piece vibe to it
It's obvious was made by a fan
Of the series responsive and
Interactive, very good.
fabulous project miss
Project is Impressive and the Idea is Unique β¨ππ»
Amazing work ππ»ππ»β€οΈβ€οΈ
BROOOO!!! This is insane!! Iβm so proud of youuu π₯π₯