You are browsing as a guest. Sign up (or log in) to start making projects!

evadiva

@evadiva

Joined June 12th, 2026

  • 10Devlogs
  • 3Projects
  • 0Ships
  • 0Votes
Open comments for this post

1h 35m 38s logged

Devlog 004: This session was mostly infrastructure and debugging rather than new features, but it cleared several blockers that had been compounding across sessions.
The backend crash loop got permanently fixed. The root cause was _exit_if_orphaned in the Python process firing on every Rust hot-reload during npm run tauri dev. When Cargo rebuilds the Tauri binary, the parent PID relationship changes momentarily, which was triggering the orphan detection and killing Python deliberately with exit code 0. The monitor thread interpreted that as a clean exit and did not restart it. The fix was disabling orphan detection entirely in dev mode via the CANVAS_HUB_DEV environment variable, and switching the production check from getppid() == 1 to os.kill(parent_pid, 0) for a more robust existence check. The Rust monitor thread also got crash logging via dirs::home_dir() so it is no longer dependent on the Tauri AppHandle being available from a background thread.
Tile resizing and photo row contagion were also fixed this session, and the actual root causes turned out to be completely different from where previous fixes were looking. The resize buttons were never broken at the event handling level. The real problem was an init race condition: renderPhotos() was fetching /photos before the backend was up, throwing an unhandled error, and killing the rest of initDashboard() before initResizeControls() ever ran. A waitForBackend() health poll now gates all data fetches, so resize listeners are always wired up regardless of how long the backend takes to start. The photo row contagion was caused by height: 100% on the photo resolving to the image’s natural aspect-ratio height during grid track sizing, inflating the row for every neighbor. Switching to position: absolute; inset: 0 on the image fixes the height to the tile bounds and removes it from the track sizing calculation entirely.
Goals this month is now its own separate widget card, extracted from the assignments card where it had been living under a rule separator.

0

Loading discussion…

0
2
Open comments for this post

2h 34m 34s logged

devlog #004: This session was a chaotic debugging spiral. I set out to finish the draggable grid, but the layout engine absolutely broke.In trying to fix some initial resizing glitches, I overcorrected so hard that I accidentally locked the entire grid down. Nothing could resize at all. Once I untangled that, I hit a new nightmare: whenever I tried to drag a widget, it would interpret the movement as a resize command and stretch wildly across the screen instead of moving.The fixes: 1. Unlocked the layout logic so widgets can actually scale again. 2. Fixed the drag vs. resize conflict. Now, dragging the header moves the widget smoothly, and edge-pulling handles the resizing. No more morphing. It was an exhausting troubleshooting session, but the grid is finally stable.

0

Loading discussion…

0
3
Open comments for this post

2h 20m 53s logged

devlog 003: personal dashboard
Mostly a fixes session. Nothing new shipped but a lot of things that were broken or annoying got resolved.
The calendar was the biggest one. It had been crammed into a half-width column sharing space with the timer and reading list, which made the weekly view basically unusable. It now takes up the full right two-thirds of the screen, which is what it needed to actually function as a calendar. Time blocks, day columns, navigation arrows, auto-scroll to the current hour on load. It looks right now.
Google Calendar auth also finally works. The onboarding screen had appeared once, I hit “later,” and the flag that tracks whether it had been seen was permanently set with no way to reset it from the UI. A connect button in settings now clears that flag and shows the onboarding immediately, no restart needed. Went through the actual browser consent flow and it works: browser opens, redirect hits the loopback server, token stores correctly.
Two bugs on the smaller side. The photo picker was freezing the app completely because the file dialog was running on the main Tauri thread using the blocking API variant instead of the async one. One-line fix once the cause was clear. The calendar time labels were getting clipped by overflow collapsing the absolute-positioned label column. Widening the column tracks from 36px to 48px cleared it.
Spotify got shrunk. It was taking up a full-width row with nothing in it. Now it is a compact 80px cell in the top strip next to the timer and reading list, which is the right amount of space for it.
Next session: draggable grid with persistent layout.

0

Loading discussion…

0
3
Open comments for this post

1h 38m 37s logged

devlog 002: personal dashboard
The dashboard is starting to look good!!!
The biggest change was pulling the pink theme entirely and replacing it with a warm sepia palette: dark brown base, aged gold accents, serif headers on everything. I wanted it to feel a little more academic. The layout also got reworked into an asymmetric bento grid, where Canvas takes up a tall left column, the calendar strip runs wide across the bottom right, and the smaller widgets fill in around them.
New widgets added this session: a reading list that resolves book covers from whatever URL you paste in (it checks for an Open Graph image tag first, then falls back to the Google Books API if that fails), an active projects tracker, monthly goals that scope themselves to the current month without deleting older ones, notable events displayed as date pills, a countdown timer that fires a native desktop notification when it hits zero, and photo panels that slot into the bento grid as pure image tiles with no widget chrome around them.
Spotify was simpler than expected. The embedded player works fine once you add Spotify’s domain to the Tauri Content Security Policy config. Without that one line, the iframe loads blank with no error, which took a minute to figure out.
Google Calendar had been stuck because the onboarding screen appeared once, I dismissed it with “later,” and there was no way back to it. Connect and disconnect controls are now in the settings page, so that’s no longer a dead end.
The one remaining item for Google Calendar is entering real credentials from the Google Cloud Console and completing an actual browser OAuth consent flow.

0

Loading discussion…

0
4
Open comments for this post

3h 10m 5s logged

devlog 001: personal dashboard
got a working desktop app running by end of session. the whole point was to stop missing Canvas assignments; one screen, always open, checks automatically.
backend is FastAPI running as a sidecar inside a Tauri shell, SQLite for storage, APScheduler polling Canvas every 30 minutes. token lives in the OS keychain, never the repo. first-run onboarding handles the whole flow.
the bugs took most of the time. CORS was failing because Tauri dev mode sends a different webview origin than a production build; nothing in the docs tells you this. the /setup endpoint would silently hang because there was no timeout on the Canvas validation request. the dashboard never appeared after login because a display: flex rule was winning over the hidden attribute, so onboarding just stayed on screen even after auth worked fine. and at some point the app started spawning duplicate processes with separate backends, which needed single-instance enforcement to fix.
real credentials work, assignments load from the live API, checklist survives restarts. it’s on GitHub. palette is plum and pink, pulled from my VS Code theme.
next up is Google Calendar.

0

Loading discussion…

0
2
Open comments for this post

4h 29m 20s logged

Worked on the night sky, fog systems, and the horse.
The moon turned out beautiful first try basically - soft glow, real shadows on the terrain, stars scattered everywhere. That part just worked.
The deer needed a fix - turns out the model I grabbed only had ONE animation in the whole file, no walk cycle at all, so they’d just slide around like ghosts. Swapped the model, fixed how spread out they get, now they actually wander around like real animals instead of clumping into one weird deer blob.
Then the horse. Got it riding, got a cowboy sitting in the saddle, mount/dismount working… and then spent what felt like forever convinced I had two horses glitching on top of each other. Turned out to be one misplaced node plus a camera setup I’d let get way too complicated, fighting itself every single frame. Eventually just gave up patching it and rebuilt the whole camera thing from scratch, way simpler.
Still finishing it up but it’s SO close - night valley, deer wandering around, a horse I can actually hop on and ride.

1

Loading discussion…

0
34
Open comments for this post

5h 50m 23s logged

Terrain, Water system, and Grass: Sculpted and textured the mountain terrain in Terrain3D - grass, rock, and snow blending across the valley and peaks.
Built the river next. Wrote a mesh generator that traces a curve through the valley and extrudes a flowing ribbon along it. Took a handful of broken attempts before it actually generated cleanly.
Then grass. Built a scatter system that places blades across the terrain while avoiding steep slopes, the snowline, and the river itself. Fixed a transparency bug, fixed a sizing bug, and finally landed on 200,000 instances. The valley actually reads as a meadow now instead of a test scene.
The waterfall took the most work. Built it as a walk-under structure with layered falling water, billowing displacement, mist and splash particles, and spatial audio. Along the way I discovered my working files had been saving outside the actual project folder the whole time, which explained a bunch of mysterious broken paths. Ported in a proper wave shader, fixed a handful of Godot 4 syntax breaks, and got ripples, foam, and reflection all working. Also fixed a white-out bug so the water stays blue from most angles instead of blowing out to solid white when viewed head-on.
Last step was applying that same water shader to the river so everything matches. For the first time the world actually feels like a place instead of a pile of debug shapes.

0

Loading discussion…

0
14
Open comments for this post

2h 1m 19s logged

Decided to build a browser-based 3D game as a Father’s Day gift. The concept: a Rocky Mountain valley exploration game inspired by Red Dead Redemption 2. Player rides a horse through a mountain landscape, finds a cabin filled with family photos, reads a personal letter, watches deer scatter in a clearing. The whole thing accessible via a single link with no download, no install. Started with Three.js but relized that three.js was not gonna get me were I wanted this game to be. Switched to Godot 4.6 which has proper PBR lighting, built in particle systems, and web export. First draft of the game below

1

Loading discussion…

0
17

Followers

Loading…