Hi, I'm Kimmo, and you're viewing my portfolio site.
I'm a first-year computer science student at the University of Oulu. I like knowing things, and don't like not being able to understand them. I'm a software person, but I like all kinds of systems and thingamajigs, soft or hard.
In my projects, I want to get some nice visuals on the screen early on; working on something nice and cool is more inspiring. After that I haphazardly piece together something that almost works, with a constant feeling that this is not how it's supposed to be. Refactoring usually happens when a lousy architecture needs to be expanded.'
I suddenly realized I need a portfolio site. However, what is a portfolio site if you didn't make it yourself. A few days later I have this. Of course I'm very proud. Red, blue, rounded corners...
The main problem is always how to present the information, and what even is the information to present. I wanted to create a design that would work reasonably well on mobile and desktop.

One aspect I found very challenging is content navigation. I settled on CSS-powered snap scrolling, because with this you get the most uniform experience. On the mobile version I kind of rely on the user intuition to scroll every which way. On the desktop the scroll areas show additional content as a hint.

Often on sites like these you have similar or identical layouts with different content. I ended up with this inline-mini-CMS approach. Not ideal if you want to differentiate a piece of content, but on time constraints... For first version, only. Only for first.

I suddenly realized I need a portfolio site. However, what is a portfolio site if you didn't make it yourself. A few days later I have this. Of course I'm very proud. Red, blue, rounded corners...
The main problem is always how to present the information, and what even is the information to present. I wanted to create a design that would work reasonably well on mobile and desktop.
One aspect I found very challenging is content navigation. I settled on CSS-powered snap scrolling, because with this you get the most uniform experience. On the mobile version I kind of rely on the user intuition to scroll every which way. On the desktop the scroll areas show additional content as a hint.
Often on sites like these you have similar or identical layouts with different content. I ended up with this inline-mini-CMS approach. Not ideal if you want to differentiate a piece of content, but on time constraints... For first version, only. Only for first.
TypeScript
Angular
CSS
Tailwind
Responsive
I suddenly realized I need a portfolio site. However, what is a portfolio site if you didn't make it yourself. A few days later I have this. Of course I'm very proud. Red, blue, rounded corners...
The main problem is always how to present the information, and what even is the information to present. I wanted to create a design that would work reasonably well on mobile and desktop.

One aspect I found very challenging is content navigation. I settled on CSS-powered snap scrolling, because with this you get the most uniform experience. On the mobile version I kind of rely on the user intuition to scroll every which way. On the desktop the scroll areas show additional content as a hint.

Often on sites like these you have similar or identical layouts with different content. I ended up with this inline-mini-CMS approach. Not ideal if you want to differentiate a piece of content, but on time constraints... For first version, only. Only for first.

I suddenly realized I need a portfolio site. However, what is a portfolio site if you didn't make it yourself. A few days later I have this. Of course I'm very proud. Red, blue, rounded corners...
The main problem is always how to present the information, and what even is the information to present. I wanted to create a design that would work reasonably well on mobile and desktop.
One aspect I found very challenging is content navigation. I settled on CSS-powered snap scrolling, because with this you get the most uniform experience. On the mobile version I kind of rely on the user intuition to scroll every which way. On the desktop the scroll areas show additional content as a hint.
Often on sites like these you have similar or identical layouts with different content. I ended up with this inline-mini-CMS approach. Not ideal if you want to differentiate a piece of content, but on time constraints... For first version, only. Only for first.
TypeScript
Angular
CSS
Tailwind
Responsive
After doing a course on differential equations, I thought to myself: 'So basically... I can do anything, and I don't even need to solve it?' They should teach THIS in school. After thinking a bit about what to do with it, I settled on an 'ecological simulation'.

At the heart of the application is the Lotka-Volterra ODE system, which is solved using Boost::odeint and compiled to WebAssembly by Emscripten. Learning something about ODE system analysis would allow to make the behaviour more interesting; now it settles on identical oscillations. In short: Cool equations presented with TV-hacker aesthetics doesn't mean a person knows.

The state of the system is visualized using a chart, data tables and animated trend lines of sorts. A Web Worker is used to draw the animated trend lines to keep it off the main thread.

After doing a course on differential equations, I thought to myself: 'So basically... I can do anything, and I don't even need to solve it?' They should teach THIS in school. After thinking a bit about what to do with it, I settled on an 'ecological simulation'.
At the heart of the application is the Lotka-Volterra ODE system, which is solved using Boost::odeint and compiled to WebAssembly by Emscripten. Learning something about ODE system analysis would allow to make the behaviour more interesting; now it settles on identical oscillations. In short: Cool equations presented with TV-hacker aesthetics doesn't mean a person knows.
The state of the system is visualized using a chart, data tables and animated trend lines of sorts. A Web Worker is used to draw the animated trend lines to keep it off the main thread.
TypeScript
Tailwind
Workers
Angular
ODEs
C++
WASM
Pixi.js
Chart.js
Emscripten
After doing a course on differential equations, I thought to myself: 'So basically... I can do anything, and I don't even need to solve it?' They should teach THIS in school. After thinking a bit about what to do with it, I settled on an 'ecological simulation'.

At the heart of the application is the Lotka-Volterra ODE system, which is solved using Boost::odeint and compiled to WebAssembly by Emscripten. Learning something about ODE system analysis would allow to make the behaviour more interesting; now it settles on identical oscillations. In short: Cool equations presented with TV-hacker aesthetics doesn't mean a person knows.

The state of the system is visualized using a chart, data tables and animated trend lines of sorts. A Web Worker is used to draw the animated trend lines to keep it off the main thread.

After doing a course on differential equations, I thought to myself: 'So basically... I can do anything, and I don't even need to solve it?' They should teach THIS in school. After thinking a bit about what to do with it, I settled on an 'ecological simulation'.
At the heart of the application is the Lotka-Volterra ODE system, which is solved using Boost::odeint and compiled to WebAssembly by Emscripten. Learning something about ODE system analysis would allow to make the behaviour more interesting; now it settles on identical oscillations. In short: Cool equations presented with TV-hacker aesthetics doesn't mean a person knows.
The state of the system is visualized using a chart, data tables and animated trend lines of sorts. A Web Worker is used to draw the animated trend lines to keep it off the main thread.
TypeScript
Tailwind
Workers
Angular
ODEs
C++
WASM
Pixi.js
Chart.js
Emscripten
I am also not ignorant of marketing realities. This is why my physics-based racing game Circles Roll in the Dark only contains good music that speaks to gamers young and old. Look at that credits screen. Don't you just want to imagine what, exactly, went on in that mystical land?
Here, I explain how I tried going about creating physics-based gears in the Godot game engine. I don't know anything about gear design, I just used the circumference of a circle. It shows how you can have immediate feedback in the editor for level design, for example.
Unfortunately, it wasn't to be. I don't think the Godot physics engine was made for this use case. Metaphor for life?
I am also not ignorant of marketing realities. This is why my physics-based racing game Circles Roll in the Dark only contains good music that speaks to gamers young and old. Look at that credits screen. Don't you just want to imagine what, exactly, went on in that mystical land?
Here, I explain how I tried going about creating physics-based gears in the Godot game engine. I don't know anything about gear design, I just used the circumference of a circle. It shows how you can have immediate feedback in the editor for level design, for example.
Unfortunately, it wasn't to be. I don't think the Godot physics engine was made for this use case. Metaphor for life?
GDScript
Games
UI
Godot 4
Game design
I am also not ignorant of marketing realities. This is why my physics-based racing game Circles Roll in the Dark only contains good music that speaks to gamers young and old. Look at that credits screen. Don't you just want to imagine what, exactly, went on in that mystical land?
Here, I explain how I tried going about creating physics-based gears in the Godot game engine. I don't know anything about gear design, I just used the circumference of a circle. It shows how you can have immediate feedback in the editor for level design, for example.
Unfortunately, it wasn't to be. I don't think the Godot physics engine was made for this use case. Metaphor for life?
I am also not ignorant of marketing realities. This is why my physics-based racing game Circles Roll in the Dark only contains good music that speaks to gamers young and old. Look at that credits screen. Don't you just want to imagine what, exactly, went on in that mystical land?
Here, I explain how I tried going about creating physics-based gears in the Godot game engine. I don't know anything about gear design, I just used the circumference of a circle. It shows how you can have immediate feedback in the editor for level design, for example.
Unfortunately, it wasn't to be. I don't think the Godot physics engine was made for this use case. Metaphor for life?
GDScript
Games
UI
Godot 4
Game design
Contact me at kviitane24@student.oulu.fi