Skip to content

Commit

Permalink
Update project descriptions and links
Browse files Browse the repository at this point in the history
  • Loading branch information
rosslh committed Jun 26, 2024
1 parent 3eb606e commit dc9c358
Show file tree
Hide file tree
Showing 45 changed files with 41 additions and 46 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

[![Test](https://github.com/rosslh/rosshill.ca/actions/workflows/test.yml/badge.svg)](https://github.com/rosslh/rosshill.ca/actions/workflows/test.yml)
[![Netlify Status](https://api.netlify.com/api/v1/badges/bb0ce20c-358e-4da7-971d-00d6fb6dd61b/deploy-status)](https://app.netlify.com/sites/rosshillca/deploys)
![Uptime Robot status](https://img.shields.io/uptimerobot/status/m790314032-370a587a3e224bc6e524ccd1)
[![Uptime Robot status](https://img.shields.io/uptimerobot/status/m790314032-370a587a3e224bc6e524ccd1)](https://rosshill.ca/)

Built with SvelteKit.
[rosshill.ca](https://rosshill.ca/) is more than just a portfolio; it's a testament to my love for crafting elegant and efficient web experiences. Dive into a curated collection of my projects, easily navigated through a filterable timeline. Discover features like the dynamic profile picture, changing with holidays, and a dropdown theme picker. Built with a focus on code quality and backed by a comprehensive test suite, this site reflects my commitment to the highest development standards.

## License

Expand Down
Binary file modified assets/headshot.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/briza-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/caledon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/circuit.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/doctalk-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/dodgeball.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/doormat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/fire.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/folda.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/hurontario.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/isearthstillwarming.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/mandelbrot-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/mandelbrot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/metaprojection-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/metaprojection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/moment.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/muse.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/nudge-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/qhacks-crown.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/qhacks.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/qtma.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/queens-thumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/qvft.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/rainbow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/reqwise.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/timeline/robot.png
Binary file added assets/timeline/rust-mandelbrot.png
Binary file modified assets/timeline/traffic.png
Binary file modified assets/timeline/unitransform.png
Binary file modified assets/timeline/verafin-thumb.png
Binary file modified assets/timeline/vibeify.png
Binary file modified assets/timeline/webofdevs-thumb.png
Binary file modified assets/timeline/wtformat.png
3 changes: 1 addition & 2 deletions content/IsEarthStillWarming.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
title: IsEarthStillWarming.com
eventType: project
date: 2019-01-11
lastModified: 2023-04-23
website: https://isearthstillwarming.com
repository: https://github.com/rosslh/isearthstillwarming.com
repository: https://github.com/rosslh/IsEarthStillWarming.com
image: isearthstillwarming
thumbnail: fire
thumbnailBorder: true
Expand Down
1 change: 0 additions & 1 deletion content/dodgeball.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: "Dodgeball: The Game"
eventType: project
date: 2018-01-01
lastModified: 2023-04-23
thumbnailExt: jpg
thumbnail: dodgeball
thumbnailBorder: true
Expand Down
1 change: 0 additions & 1 deletion content/mandelbrot.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: Python Mandelbrot Set Explorer
eventType: project
date: 2016-11-29
lastModified: 2022-09-06
repository: https://github.com/rosslh/Mandelbrot-set-explorer
image: mandelbrot
thumbnail: mandelbrot-thumb
Expand Down
7 changes: 3 additions & 4 deletions content/metaProjection.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
---
title: MetaProjection
title: MetaProjection.ca
eventType: project
date: 2019-08-20
lastModified: 2023-04-23
website: https://2021.metaprojection.ca
repository: https://github.com/rosslh/metaprojection
repository: https://github.com/rosslh/MetaProjection.ca
image: metaprojection
thumbnail: metaprojection-thumb
thumbnailBorder: true
excerpt: An aggregator of multiple Canadian federal electoral projections which provides an overview of how the election is playing out, both federally and by district. Updated for 2021.
excerpt: An aggregator of Canadian federal electoral projections. It provides an overview of how the election is playing out, both federally and by district.
tags: [gatsby, graphql, nodedotjs]
---

Expand Down
1 change: 0 additions & 1 deletion content/qhacks.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ eventType: other
eventTypeLabel: Organization
date: 2018-04-21
endDate: 2019-03-20
lastModified: 2022-09-06
image: qhacks
thumbnail: qhacks-crown
excerpt: Built the landing page for the hackathon and a web portal which over 1800 students used to apply. The websites were built with React and used GraphQL to retrieve data for the user interface.
Expand Down
1 change: 0 additions & 1 deletion content/reqwise.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
title: ReqWise
eventType: project
date: 2020-04-01
lastModified: 2023-04-23
thumbnail: reqwise
thumbnailBorder: true
excerpt: An easier way for web developers and digital agencies to understand their customer's needs. Brainstorm requirements, propose designs, and get stakeholder sign-off.
Expand Down
15 changes: 12 additions & 3 deletions content/rust-fractals.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
---
title: Mandelbrot Set Explorer
title: Mandelbrot.site
eventType: project
date: 2021-01-01
repository: https://github.com/rosslh/mandelbrot.site
repository: https://github.com/rosslh/Mandelbrot.site
website: https://mandelbrot.site
thumbnail: mandelbrot-thumb
excerpt: An interactive application that lets you explore the Mandelbrot set fractal. Built with Rust, compiled to WebAssembly, running on Web Workers.
image: rust-mandelbrot
excerpt: An interactive application that lets you explore the Mandelbrot set fractal and generate high resolution images.
tags: [rust, webassembly, typescript]
---

Mandelbrot.site is a web-based viewer that allows users to explore the fascinating world of the Mandelbrot set, a complex mathematical fractal. The project leverages cutting-edge web technologies, including Rust, WebAssembly (Wasm), TypeScript, and Leaflet.js, to create a high-performance, interactive, and visually captivating experience.

The viewer enables users to navigate through different regions of the Mandelbrot set seamlessly, offering features such as dynamic zooming, iteration adjustment, and customizable color schemes. Additionally, users can explore multibrot sets and generate shareable URLs to share their unique fractal discoveries with others.

Under the hood, the application combines the power of Rust for high-performance computations, WebAssembly for efficient execution in the browser, and TypeScript for enhanced frontend development. The integration of these technologies, along with innovative optimizations like rectangle checking and the use of Web Workers, ensures a smooth and responsive user experience.

Mandelbrot.site demonstrates the potential of modern web technologies in creating sophisticated, CPU-intensive applications. It serves as an educational tool, an artistic platform, and a source of inspiration for those interested in the intersection of mathematics, computation, and visual beauty.
2 changes: 1 addition & 1 deletion content/webofdevs.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ date: 2023-03-05
website: https://webofdevs.com
thumbnail: webofdevs-thumb
thumbnailBorder: true
excerpt: Web of Devs is a community of developers with amazing webpages. You can browse personal websites, save the best ones you find, and share your own.
excerpt: Web of Devs is a community of developers with amazing webpages. You can browse personal sites, save your favorites, and share your own.
tags: [typescript, svelte, nestjs, postgresql]
# vercel, heroku
---
23 changes: 16 additions & 7 deletions content/wtformat.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
---
title: WTFormat
title: WTFormat.com
eventType: project
date: 2021-08-01
lastModified: 2023-04-23
repository: https://github.com/rosslh/wtformat
repository: https://github.com/rosslh/WTFormat.com
website: https://wtformat.com
image: wtformat
thumbnail: moment
thumbnailBorder: true
excerpt: An online tool for generating date format codes. Originally created in 2018, I rewrote it in 2021 to support more formatting libraries.
excerpt: An online tool to generate date format codes for popular date formatting libraries, including date-fns, Moment.js, Day.js, and Luxon.
tags: [vuedotjs, typescript]
---

<a target="_blank" rel="noopener noreferrer" href="https://momentjs.com">Moment.js</a> is a JavaScript library that can parse, manipulate, and format dates and times. To format a date, you give Moment a time code like <code>YYYY-MM-DD</code>. When I was working front-end at <a target="_blank" rel="noopener noreferrer" href="https://www.nudge.ai">Nudge.ai</a>, I found myself having to go to Moment's documentation to see how to format dates in various ways.
In the fast-paced world of web development, efficiency is key. Developers constantly seek tools that streamline their workflow and reduce the time spent on repetitive tasks. One such task is date formatting, which can be a headache due to the variety of format codes required by different libraries. Enter WTFormat, a user-friendly tool that simplifies the date formatting process, saving developers time and effort.

In order to make the process of date formatting faster, I created WTFormat.com, which gives you a date which you rewrite in your preferred format. The site then generates the Moment format code that would yield that output.
WTFormat takes a straightforward approach to date formatting. There is a text input where you write a date in your desired format. When you hit the "generate" button, WTFormat outputs the corresponding format codes for popular date libraries such as date-fns, Moment.js, Day.js, and Luxon. This eliminates the need for developers to memorize or search for format codes, allowing them to focus on more critical aspects of their projects.

Rewritten in 2021 to support more formatting libraries, now using NuxtJS (Vue) and TypeScript.
## Benefits for Developers

WTFormat caters to developers of all skill levels. Front-end developers can quickly implement consistent date formats across their projects without the hassle of looking up format codes. Full-stack developers can seamlessly transition between projects that utilize different date libraries, as WTFormat provides the necessary format codes for each library. Beginners can use WTFormat to learn how various libraries handle date formatting through its intuitive interface.

The benefits of WTFormat extend beyond the development team. Project managers can use the tool to clearly communicate desired date formats to developers, ensuring that everyone is on the same page. This reduces miscommunication and potential errors, leading to a more efficient development process.

As web development continues to evolve, tools like WTFormat will play an increasingly crucial role in simplifying common tasks. By streamlining the date formatting process, WTFormat contributes to increased productivity and improved code quality. As more developers adopt tools that prioritize efficiency, we can expect to see a rise in innovative and engaging web experiences.

## Conclusion

WTFormat is a game-changer for developers who want to optimize their workflow and reduce the time spent on repetitive tasks. By providing a user-friendly interface and generating format codes for popular date libraries, WTFormat simplifies the date formatting process. As a result, developers can focus on creating cutting-edge web applications, while project managers can ensure clear communication and consistent date formats across their projects. In the fast-paced world of web development, tools like WTFormat are essential for staying ahead of the curve.
17 changes: 0 additions & 17 deletions src/routes/sitemap.xml/+server.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,18 @@
import { data } from "$data/posts.json";
import { slugify } from "$lib/functions";
import { startOfMonth, format, max, parse } from "date-fns";
import xmlFormat from "xml-formatter";

export async function GET() {
const formatDate = (date: Date) => format(date, "yyyy-MM-dd");
const parseDate = (date: string) =>
parse(date.slice(0, 10), "yyyy-MM-dd", new Date());

const firstDayOfMonth = startOfMonth(new Date());

const urls = data
.filter(({ contents, isHidden }) => contents && !isHidden)
.map((post) => ({
loc: `https://rosshill.ca/item/${slugify(post.title)}`,
lastmod: post.lastModified && formatDate(parseDate(post.lastModified)),
changefreq: "monthly",
priority: 0.8,
}));

const mostRecentPostModified =
data
.filter((post) => post.contents && !post.isHidden && post.lastModified)
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
.map((post) => parseDate(post.lastModified!))
.sort((a, b) => b.getTime() - a.getTime())[0] ?? firstDayOfMonth;

urls.unshift({
loc: "https://rosshill.ca/",
lastmod: formatDate(max([mostRecentPostModified, firstDayOfMonth])),
changefreq: "monthly",
priority: 1,
});
Expand All @@ -37,7 +21,6 @@ export async function GET() {
(url) => `
<url>
<loc>${url.loc}</loc>
<lastmod>${url.lastmod}</lastmod>
<changefreq>${url.changefreq}</changefreq>
<priority>${url.priority}</priority>
</url>
Expand Down
12 changes: 6 additions & 6 deletions tests/specs/filters.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,38 @@ test("Event type filter works", async ({ page }) => {
const workFilter = getLocator([page, "event-filter-work"]);

// Before clicking the filter, the wtformat item should exist
await expectCount([page, "post-stub-wtformat"], 1);
await expectCount([page, "post-stub-wtformat.com"], 1);

await workFilter.click();

// After clicking the filter, the wtformat item should not exist
await expectCount([page, "post-stub-wtformat"], 0);
await expectCount([page, "post-stub-wtformat.com"], 0);

await workFilter.click();

// After clicking the filter again, the wtformat item should exist
await expectCount([page, "post-stub-wtformat"], 1);
await expectCount([page, "post-stub-wtformat.com"], 1);
});

test("Skill tag filter works", async ({ page }) => {
const djangoFilter = getLocator([page, "skill-filter-django"]);
const jsFilter = getLocator([page, "skill-filter-javascript"]);

// Before clicking the filter, the wtformat item should exist
await expectCount([page, "post-stub-wtformat"], 1);
await expectCount([page, "post-stub-wtformat.com"], 1);

await djangoFilter.click();

// After clicking the filter, the wtformat item should not exist
await expectCount([page, "post-stub-wtformat"], 0);
await expectCount([page, "post-stub-wtformat.com"], 0);

// But the doctalk item should exist
await expectCount([page, "post-stub-full-stack-developer-doctalk"], 1);

await jsFilter.click();

// After clicking the filter, the wtformat item should now exist
await expectCount([page, "post-stub-wtformat"], 1);
await expectCount([page, "post-stub-wtformat.com"], 1);

// And the doctalk item should exist
await expectCount([page, "post-stub-full-stack-developer-doctalk"], 1);
Expand Down

0 comments on commit dc9c358

Please sign in to comment.