DEV Community

Cover image for Logpose 🧭 β€” A 3D Compass That Points to Your Greatest Passion
Zainab Naeem
Zainab Naeem

Posted on

Logpose 🧭 β€” A 3D Compass That Points to Your Greatest Passion

DEV Weekend Challenge: Passion Edition Submission

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:

  1. Landing Page: Landing page
  2. Dashboard: Dashboard
  3. Islands: Islands
  4. Achievement: Achievement
  5. Log session: 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:

GitHub logo 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.

icons8-star-100

Logpose 🧭

A 3D interactive compass that points to your greatest passions.
Built for the DEV Weekend Challenge: Passion Edition (Category: Best use of Snowflake ❄️)

Live Demo


🌟 Landing page:

logpose5

🌟 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
Enter fullscreen mode Exit fullscreen mode

Top comments (8)

Collapse
 
satyam_pandey_ea26c10bc18 profile image
SATYAM PANDEY

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!

Collapse
 
hussain_zaviyar_932fed10d profile image
Hussain Zaviyar

Wastay k na huiyaaa

Collapse
 
sammarawann profile image
Sammar Awan

SOOO GOOOD!! πŸ”₯πŸ”₯πŸ”₯πŸ”₯πŸ”₯

Collapse
 
wiz_c640eacbfab455b11c71b profile image
Wiz

Love the one piece vibe to it
It's obvious was made by a fan
Of the series responsive and
Interactive, very good.

Collapse
 
adilawan profile image
Malik adil jahangir Sani

fabulous project miss

Collapse
 
m-waqas-rafique profile image
Muhammad Waqas Rafique

Project is Impressive and the Idea is Unique βœ¨πŸ‘πŸ»

Collapse
 
maham_asaad_05c0b72a73f7b profile image
Maham Asaad

Amazing work πŸ‘πŸ»πŸ‘πŸ»β€οΈβ€οΈ

Collapse
 
mariam_khalid_7773ed85cf2 profile image
Mariam Khalid

BROOOO!!! This is insane!! I’m so proud of youuu πŸ”₯πŸ”₯