{"id":33897188,"url":"https://github.com/parawanderer/personalsite2025","last_synced_at":"2026-06-05T11:31:32.308Z","repository":{"id":285308155,"uuid":"957491407","full_name":"parawanderer/personalsite2025","owner":"parawanderer","description":"Personal Website for 2025. Animated in Three.js","archived":false,"fork":false,"pushed_at":"2025-04-03T11:33:35.000Z","size":25689,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-12T20:48:53.184Z","etag":null,"topics":["3d-graphics","art","graphics-programming","single-page-app","threejs","webgl","website"],"latest_commit_sha":null,"homepage":"https://wander.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/parawanderer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-30T14:05:40.000Z","updated_at":"2025-04-27T16:44:03.000Z","dependencies_parsed_at":"2025-03-31T00:35:13.191Z","dependency_job_id":null,"html_url":"https://github.com/parawanderer/personalsite2025","commit_stats":null,"previous_names":["parawanderer/personalsite2025"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/parawanderer/personalsite2025","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parawanderer%2Fpersonalsite2025","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parawanderer%2Fpersonalsite2025/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parawanderer%2Fpersonalsite2025/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parawanderer%2Fpersonalsite2025/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/parawanderer","download_url":"https://codeload.github.com/parawanderer/personalsite2025/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/parawanderer%2Fpersonalsite2025/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33939225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-graphics","art","graphics-programming","single-page-app","threejs","webgl","website"],"created_at":"2025-12-11T19:05:05.785Z","updated_at":"2026-06-05T11:31:32.302Z","avatar_url":"https://github.com/parawanderer.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal Website 2025\n\nSource code for my 2025 personal website revamp. Available at [wander.dev](https://wander.dev)\n\nSome more pictures [here](./docs/). And a video [here](https://youtu.be/8iNIcQxMEDg)\n\n[![Screenshot of website main page](./docs/main_page.png)](https://youtu.be/8iNIcQxMEDg)\n\n## Notes\n\nI was curious how far and artistic you can go with Javascript these days since the last personal webpage I had. I think back then having animated SVGs was the \"new thing\", hence I included that in my old (very basic) personal web page.\n\nThis time I decided to mess around with [WebGL](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API)/[Three.js](https://threejs.org/). This is after having messed around in basic [OpenGL](https://learnopengl.com/) in C++ a while ago -- Three.js is less annoying to use: mainly due to already having written all the classes I was essentially writing from scratch in OpenGL 😛 (honestly I'm surprised how similar their API design turned out to be to the stuff I was making up on the fly with my OpenGL experiment!).\n\nI liked the idea of having a \"pretty, custom, interactive\" background with the whole page following the same \"theme\", and I thought making something \"artsy\" looking in 3D could be the next level of improvement to my page.\n\nI started off with the idea of a [basalt columns](https://en.wikipedia.org/wiki/Columnar_jointing) \"tunnel/ravine\" scene (because I really like the geometry of these things) with water, and after looking at a bunch of inspiration pictures from search results like \"`basalt columns fantasy art`\" I came up with this. I tried to have a \"`Glasmorphism`\" theme, mostly because I'd recently read about this trend in UI design and liked the way it looks.\n\nMind me, I'm a generalist SWE that lately mostly did distributed systems/backend. So excuse the rather hobbyist-looking design 😛\n\n\n## Issues\n\n- I wrote this while looking at a desktop computer browser and it's really built around being viewed on a browser, not all mobile device resolutions/orientations are supported.\n- I was too lazy to implement my own mobile controls (the module I used from three.js for the keyboard controls does not support mobile out-of-the-box). So no mobile fly around in the 3d world for now. Which probably removes most of the value of this design, because you can't even clearly see the background at that point.\n- It seems that even on my rather overpriced \"gaming\" laptop, there's some issue where when trying to render my \"glitching\" animation on top of some more \"complex\" (in the sense of a lot of things changing simultaneously) WebGL animation in the background, such that even my laptop starts having hickups. I suppose it fits the \"glitching\" theme, but this isn't really intentional.\n- It's not as optimised as it could be. More stuff (particularly time-bound position updates for e.g. the particles) could be moved into the shaders\n- Honestly no idea if this will run on the average visitor's computer lol. For me it was hitting 230 FPS relatively consistently, but YMMV\n- It's not automatically unit-tested whatsoever! There are certainly a few classes that could be tested, and I suppose you could write some headless browser automated test if you really wanted to be thorough\n- I wanted to add a \"glitch\" effect in the actual 3D environment but ended up being too lazy to set it up. Something like [this one](https://domenicobrz.github.io/webgl/projects/experiment1/) has would be neat, but this requires way more setup than just using the glitch effect.\n- Apparently Firefox doesn't support the rotating cards with glassmorphism/blur. That's too bad.\n\n-----------\n## Development\n\n#### Prerequisites\n\n- [nodejs](https://nodejs.org/en) with `npm` (initially built using `v20.16.0`)\n- [TypeScript](https://www.typescriptlang.org/) knowledge. (Javascript knowledge will probably do, it's easy enough to infer)\n- [GLSL](https://en.wikipedia.org/wiki/OpenGL_Shading_Language) knowledge for some of the shader edits\n\n### Running Locally\n\nClone it:\n\n```bash\ngit clone https://github.com/parawanderer/personalsite2025.git\ncd personalsite2025\n```\n\nRun it:\n\n```bash\nnpm i\nnpx vite\n```\n\nThe website becomes available at `http://localhost:5173/`\n\n### Building \"production\" build\n\n```bash\nnpx vite build\n```\n\n## Acknowledgements\n\n- Icons by [Google (Material 3)](https://fonts.google.com/icons)\n- Some asset files were reused from Three.js (e.g. [`waternormals.jpg`](https://github.com/mrdoob/three.js/blob/62bb68551ea0f206976fb288a2174803bf361ae8/examples/textures/waternormals.jpg))\n- The brand icons that I used on the \"Contact Me\"... \"page\"... were downloaded from the respective brands' design guidelines\n- [Stone marble texture](https://www.sharetextures.com/textures/floor/storm_marble_1) used on the pillars by M. Tolga Arslan via [sharetextures.com](https://www.sharetextures.com)\n- Various inspiration-sources used for _derivative_ implementations are documented in the code itself\n\n## License\n\nNone. OCPlsDontSteal. Feel free to use this as a reference/inspiration though if you happen to stumble across it.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparawanderer%2Fpersonalsite2025","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparawanderer%2Fpersonalsite2025","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparawanderer%2Fpersonalsite2025/lists"}