{"id":21853331,"url":"https://github.com/emnudge/portfolio-sapper","last_synced_at":"2026-04-12T17:03:08.997Z","repository":{"id":98732551,"uuid":"295313666","full_name":"EmNudge/portfolio-sapper","owner":"EmNudge","description":"my website, but in Sapper!","archived":false,"fork":false,"pushed_at":"2021-03-08T22:26:05.000Z","size":454,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T02:09:29.106Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://kipperman.co","language":"Svelte","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/EmNudge.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":"2020-09-14T05:32:36.000Z","updated_at":"2021-03-08T22:26:08.000Z","dependencies_parsed_at":"2023-03-13T15:55:47.082Z","dependency_job_id":null,"html_url":"https://github.com/EmNudge/portfolio-sapper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fportfolio-sapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fportfolio-sapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fportfolio-sapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fportfolio-sapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EmNudge","download_url":"https://codeload.github.com/EmNudge/portfolio-sapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244852073,"owners_count":20521151,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-28T01:21:49.668Z","updated_at":"2026-04-12T17:03:03.960Z","avatar_url":"https://github.com/EmNudge.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sapper Portfolio\nRendition of my previous portfolio, but this time with Sapper!\n\nThe dev experience with sapper over next.js is a massive improvement. The dev experience was really smooth.\n\n## Tech Explanation\nI think a better understanding of Svelte and my bad experiences with both [Gatsby](https://www.gatsbyjs.com/) and [Next.js](https://nextjs.org/) helped with my experience here. That *and* I find Sapper to have a *much* smoother develpoment experience.\n\n### Routes\nThe general idea is that we're building a lot of assets server-side. We might generate some right as the server starts and others a bit later on. Because we're outputing a static site, there isn't much of a difference.\n\nOn pages that we import changeable data, we have an accompanying `pageName.json.js` file. Here we can take advantage of Express and Node.js since this is server-side. Those files themselves other files which do some of the hard work. In the case of the reads, it is in `/data/reads/index.js`. For the blog posts, it is `/data/blog/index.js`. \n\nThe `*.json.js` files are called in our regular routes in the `preload` function. These get called before page render, so there's no actual JS needed on page-load (at least in regards to that specifically).\n\n### Parsing\nWhile we can use Node.js directly to read and then parse the provided files, it is simpler to use Rollup plugins and then just parse the result. We use a `glob` Rollup plugin which allows us to import multiple files with a single import. The available rollup plugins are a bit frustrating to work with.. Luckily, it isn't very difficult to create our own once given some way to parse the files. These are located in `/src/utils/` (`markdown.js` and `toml.js` respectively) and imported in `rollup.config.js`. I should probably choose a better folder name.\n\n### Difficulties\nPage loads. I should have decreased the bundle size by a decent amount, yet clicking links seem to be even slower than going to them directly. I am really not sure why. The pages seem to work without JS though, which is cool.\n\n## ToDo\nThe site was a rewrite of the previous, so I mostly consider it finished. Other than fixing up the problem mentioned in `Difficulties`, I probably want to move the `reads` data out of `data/reads`. At the moment, it's a bit hard to manage. The filesystem is convinient and it allows me to trigger a Netlify redeploy using github, but it forces me to make a new commit every time I want an update. I'm not sure how I feel about using commits this way, since it also mixes up in my actual code updates. I'd also like my site's code to not be entirely tied to its contents. That's basically impossible when it comes to the HTML, but it's doable for these blogs.\n\nThere's also the difficulty of organizing them and making edits afterward. The files are not ordered in my filesystem by their `\"readAt\"` date, just the date I made them. I'm planning on using the Notion API for this, but I'll have to wait until that becomes available. I could theoretically also use Notion then for the blogs, but I'd rather those be tied to the github. Notion would also restrict me in how to write the markdown, severely limiting how I can output it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femnudge%2Fportfolio-sapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femnudge%2Fportfolio-sapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femnudge%2Fportfolio-sapper/lists"}