From 6b068ccd9156de8515203d0000c3a2a8ecb9c5fb Mon Sep 17 00:00:00 2001 From: Stanisław Zagórowski Date: Fri, 12 Jan 2024 23:24:47 +0100 Subject: luax: just reluax --- front/src/app.css | 161 -------------------- front/src/app.tsx | 37 ----- front/src/components/animated_bg.tsx | 126 ---------------- front/src/components/carousel.css | 68 --------- front/src/components/carousel.tsx | 31 ---- front/src/components/navbar-item.tsx | 8 - front/src/components/navbar.css | 278 ----------------------------------- front/src/components/navbar.tsx | 20 --- front/src/components/project.css | 137 ----------------- front/src/components/project.tsx | 98 ------------ front/src/data/games.json | 229 ----------------------------- front/src/data/projects.json | 53 ------- front/src/index.css | 108 -------------- front/src/main.tsx | 5 - front/src/pages/contact.css | 22 --- front/src/pages/contact.tsx | 34 ----- front/src/pages/games.css | 0 front/src/pages/games.tsx | 27 ---- front/src/pages/home.tsx | 29 ---- front/src/pages/projects.tsx | 27 ---- front/src/vite-env.d.ts | 1 - 21 files changed, 1499 deletions(-) delete mode 100644 front/src/app.css delete mode 100644 front/src/app.tsx delete mode 100644 front/src/components/animated_bg.tsx delete mode 100644 front/src/components/carousel.css delete mode 100644 front/src/components/carousel.tsx delete mode 100644 front/src/components/navbar-item.tsx delete mode 100644 front/src/components/navbar.css delete mode 100644 front/src/components/navbar.tsx delete mode 100644 front/src/components/project.css delete mode 100644 front/src/components/project.tsx delete mode 100644 front/src/data/games.json delete mode 100644 front/src/data/projects.json delete mode 100644 front/src/index.css delete mode 100644 front/src/main.tsx delete mode 100644 front/src/pages/contact.css delete mode 100644 front/src/pages/contact.tsx delete mode 100644 front/src/pages/games.css delete mode 100644 front/src/pages/games.tsx delete mode 100644 front/src/pages/home.tsx delete mode 100644 front/src/pages/projects.tsx delete mode 100644 front/src/vite-env.d.ts (limited to 'front/src') diff --git a/front/src/app.css b/front/src/app.css deleted file mode 100644 index b16cfea..0000000 --- a/front/src/app.css +++ /dev/null @@ -1,161 +0,0 @@ -#app-main { - font-family: 'Hack', monospace; - max-width: 1280px; - margin: 0 auto; - padding: 2rem 2rem 2rem 2rem; - text-align: center; -} - -#app { - margin: 0 auto; - text-align: center; - align-content: center; - justify-content: center; -} - -.logo { - height: 6em; - padding: 1.5em; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.preact:hover { - filter: drop-shadow(0 0 2em #673ab8aa); -} - -/* fade in */ -@keyframes fade-in { - 0% { - opacity: 0; - transform: translateY(1em); - } - 60% { - transform: translateY(-0.2em); - } - 100% { - opacity: 1; - transform: translateY(0); - } -} - -.main-info > * { - animation: fade-in 0.2s ease-in; -} - -.main-info { - text-align: center; -} - -@media (min-width: 1150px) { - .main-info { - margin-top: 72px; - } -} - -.main-info-image { - width: 128px; - height: 128px; - border-radius: 100%; - margin: 6px 6px 6px 6px; -} - -.main-info-title { - font-size: 42pt; -} - -.main-info-subtitle { - font-size: 26pt; - font-style: italic; - color: #5c6370; -} - -.quiet { - color: var(--color-gray); - font-style: italic; -} - -.section { - font-size: 22pt; -} - -.highlight { - color: #e5c07b; -} - -.back-shadows { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: -1; - background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, var(--color-bg) 10%, var(--color-bg) 90%, rgba(0, 0, 0, 0) 100%); -} - -@media (max-width: 480px) { - .back-shadows { - margin: auto; - max-width: 80%; - } - .main-info-title { - font-size: 32pt; - } - - .main-info-subtitle { - font-size: 18pt; - } -} - -@media (max-width: 1150px) and (min-width: 480px) { - .back-shadows { - margin: auto; - max-width: 60%; - } - .main-info-title { - font-size: 42pt; - } - - .main-info-subtitle { - font-size: 26pt; - } -} - -@media (min-width: 1150px) { - .back-shadows { - margin: auto; - max-width: 40%; - } - .main-info-title { - font-size: 42pt; - } - - .main-info-subtitle { - font-size: 26pt; - } -} - - -@media (max-width: 480px) { - .about-paragraph { - margin: auto; - font-size: 16pt; - max-width: 90%; - } -} - -@media (max-width: 1150px) and (min-width: 480px) { - .about-paragraph { - margin: auto; - font-size: 18pt; - max-width: 80%; - } -} - -@media (min-width: 1150px) { - .about-paragraph { - margin: auto; - font-size: 18pt; - max-width: 60%; - } -} diff --git a/front/src/app.tsx b/front/src/app.tsx deleted file mode 100644 index ba081c9..0000000 --- a/front/src/app.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import './app.css' -import { Navbar } from './components/navbar' -import Contact from './pages/contact'; -import Games from './pages/games'; -import Home from './pages/home' -import { Router, Route, CustomHistory } from 'preact-router'; -import Projects from './pages/projects'; -import { HashHistory, createHashHistory } from 'history'; -import { AnimatedBg } from './components/animated_bg'; - -const hashHistoryAdapter = (hashHistory: HashHistory): CustomHistory => { - return { - listen: (callback) => hashHistory.listen(({ location }) => callback(location)), - location: hashHistory.location, - push: hashHistory.push, - replace: hashHistory.replace - }; -}; -export function App() { - const history = hashHistoryAdapter(createHashHistory()); - - return ( - <> - -
-
- - - - - - - -
- - ) -} diff --git a/front/src/components/animated_bg.tsx b/front/src/components/animated_bg.tsx deleted file mode 100644 index b5fdbb0..0000000 --- a/front/src/components/animated_bg.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { Shaders, Node, GLSL } from "gl-react"; -import { Surface } from "gl-react-dom"; -import React, { FunctionComponent } from "preact/compat"; -import { PropsWithChildren } from "preact/compat"; - -const shaders = Shaders.create({ - letters: { - frag: GLSL` -precision highp float; -varying vec2 uv; -uniform vec3 color; -uniform sampler2D t; -uniform float time; -uniform vec2 tiles; -uniform float symbol_count; - -vec2 map_to_symbol_uv(vec2 image_coord, float symbol_index) { - float symbol_width = 1.0 / symbol_count; - float symbol_height = 1.0; - float symbol_x = symbol_index * symbol_width; - return vec2(symbol_x + image_coord.x * symbol_width, image_coord.y * symbol_height); -} - -vec2 tile_index(vec2 p, vec2 tiles) { - return vec2(floor(p.x * tiles.x), floor(p.y * tiles.y)); -} - -vec2 tilefy (vec2 p, vec2 tiles) { - return vec2(fract(p.x * tiles.x), fract(p.y * tiles.y)); -} - -float randf(float n) { - return fract(sin(n) * 43758.5453123); -} - -void main() { - vec2 tile = tile_index(uv, tiles); - float tilerand = randf(tile.x + tile.y * tiles.x); - float v = tilerand + randf(floor(tilerand * time)); - float diff = fract(tilerand * time); - float s = floor(v * 9.0); - vec2 tp = tilefy(uv, tiles); - vec2 tp_center = vec2(0.5, 0.5); - float d = distance(tp, tp_center); - float scale = min(sin(diff * 3.1415) * 1.2, 1.0); - tp = tp_center + (tp - tp_center) / scale; - if (tp.x < 0.0 || tp.x > 1.0 || tp.y < 0.0 || tp.y > 1.0) { - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - return; - } - vec2 p = map_to_symbol_uv(tp, mod(s, symbol_count)); - vec4 c = texture2D(t, p); - c.rgb *= color; - c.a *= uv.y * 4.0; - gl_FragColor = vec4(c.rgb * c.a, c.a); -} -` - } -}); - -const fps = 60; - -const AnimatedBgInternal = ({ tick }: { tick: number }) => { - const t = "/assets/images/symbols.png"; - - return ( -
- - - -
- ); -} - -// a higher order component that provides a tick prop -// that updates every 1/refreshRate seconds -// -// accepts a JSX component as an argument -const timeLoop = ( - C: FunctionComponent>, - { refreshRate }: { refreshRate: number } -) => { - return class TimeLoop extends React.Component { - interval: any; - state = { tick: 0 }; - - componentDidMount() { - this.interval = setInterval(() => { - this.setState({ tick: this.state.tick + 1 }); - }, 1000 / refreshRate); - } - - componentWillUnmount() { - clearInterval(this.interval); - } - - render() { - return ; - } - }; -} - -const checkWebGL = () => { - try { - const canvas = document.createElement("canvas"); - return !!( - window.WebGLRenderingContext && - (canvas.getContext("webgl") || canvas.getContext("experimental-webgl")) - ); - } catch (e) { - return false; - } -} - -export const AnimatedBg = checkWebGL() ? timeLoop(AnimatedBgInternal, { refreshRate: fps }) : () =>
; diff --git a/front/src/components/carousel.css b/front/src/components/carousel.css deleted file mode 100644 index f311805..0000000 --- a/front/src/components/carousel.css +++ /dev/null @@ -1,68 +0,0 @@ -.carousel-content { - align-self: center; - max-height: 100%; - white-space: nowrap; - -ms-overflow-style: none; /* hide scrollbar in IE and Edge */ - scrollbar-width: none; /* hide scrollbar in Firefox */ -} - -.carousel-item { - width: 100%; - flex-shrink: 0; - height: auto; - float: left; - text-align: center; - transition: all 250ms linear; - white-space: nowrap; - vertical-align: middle; -} - -.slick-slider { - margin: 24px; -} - -.slick-slide { - margin: 0 auto; - border-radius: 10px; - text-align: center; - float: none !important; - display: inline-block !important; - vertical-align: middle; - min-height: 1px; -} - -.carousel-item > * { - border-radius: 10px; - vertical-align: middle; - width: 100%; - height: auto; -} - -.slick-dots li button::before { - color: var(--color-fg) !important; -} - -@media (max-width: 1150px) { - .carousel-wrapper { - margin: 60px auto; - width: 330px; - height: 220px; - } -} - -@media (max-width: 1150px) and (min-width: 480px) { - .carousel-wrapper { - margin: 60px auto; - width: 480px; - height: 360px; - } -} - -@media (min-width: 1150px) { - .carousel-wrapper { - float: right; - width: 480px; - height: 360px; - } -} - diff --git a/front/src/components/carousel.tsx b/front/src/components/carousel.tsx deleted file mode 100644 index af9279b..0000000 --- a/front/src/components/carousel.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import './carousel.css'; -import Slider, { Settings } from 'react-slick'; -import "slick-carousel/slick/slick.css"; -import "slick-carousel/slick/slick-theme.css"; - -export default function Carousel(props: { children: any }) { - const settings: Settings = { - dots: true, - infinite: true, - speed: 500, - slidesToShow: 1, - slidesToScroll: 1 - }; - - return ( - - ); -} diff --git a/front/src/components/navbar-item.tsx b/front/src/components/navbar-item.tsx deleted file mode 100644 index c2f2306..0000000 --- a/front/src/components/navbar-item.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import * as preact from "preact"; - -export function NavbarItem(props: any) { - const { name, href, children, rel } = props; - - return (preact.createElement("div", { className: "navbar-item" }, - preact.createElement("a", { className: "navbar-item-" + name, href: href, rel: rel }, children))); -} diff --git a/front/src/components/navbar.css b/front/src/components/navbar.css deleted file mode 100644 index 9120052..0000000 --- a/front/src/components/navbar.css +++ /dev/null @@ -1,278 +0,0 @@ -/* on big screens, navbar is fixed to the top of the screen */ -.navbar-container { - position: fixed; - /* gradient from top to bottom, full to transparent */ - top: 0; - width: 100%; - z-index: 9999; - margin: auto; -} - -/* on smaller ones, make it behave as a normal element laid out at the top of the page */ -@media (max-width: 1150px) { - .navbar-container { - position: static; - } -} - -.navbar { - padding-top: 20pt; - padding-bottom: 12pt; - align-items: center; - justify-content: center; - align-self: center; - background: linear-gradient(to bottom, var(--color-bg) 0%, var(--color-bg) 75%, rgba(0, 0, 0, 0) 100%); -} - -.navbar-icon { - font-family: Hack, monospace; - font-weight: 500; - color: #646cff; - font-size: 1.5em; - padding: 0.5em; - margin: 0.5em; -} - -.navbar { - align-self: center; - display: block; - width: 100%; - text-align: center; -} - -.navbar-item { - font-family: Hack, monospace; - font-size: 18pt; - text-align: center; - float: none; - clear: left; - display: inline-block; - margin: 0 0.25em; - transition: all 0.2s ease-in-out; -} - -.navbar-item:hover { - padding-left: 0.5em; - padding-right: 0.5em; - transition: all 0.2s ease-in-out; -} - -.navbar-current { - font-weight: bold; -} - -/* home */ - -.navbar-item-home:link { - color: #98C379; - text-decoration: none; -} - -.navbar-item-home:visited { - color: #98C379; - text-decoration: none; -} - -.navbar-item-home:hover { - color: #afd088; - text-decoration: underline; -} - -.navbar-item-home:active { - color: #afd088; - text-decoration: underline; -} - -/* games */ - -.navbar-item-games:link { - color: #e06c75; - text-decoration: none; -} - -.navbar-item-games:visited { - color: #e06c75; - text-decoration: none; -} - -.navbar-item-games:hover { - color: #ef7a80; - text-decoration: underline; -} - -.navbar-item-games:active { - color: #ef7a90; - text-decoration: underline; -} - -/* projects */ - -.navbar-item-projects:link { - color: #d19a66; - text-decoration: none; -} - -.navbar-item-projects:visited { - color: #d19a66; - text-decoration: none; -} - -.navbar-item-projects:hover { - color: #dfa873; - text-decoration: underline; -} - -.navbar-item-projects:active { - color: #dffa73; - text-decoration: underline; -} - -/* github */ - -.navbar-item-github:link { - color: #c678dd; - text-decoration: none; -} - -.navbar-item-github:visited { - color: #c678dd; - text-decoration: none; -} - -.navbar-item-github:hover { - color: #d286eb; - text-decoration: underline; -} - -.navbar-item-github:active { - color: #d286eb; - text-decoration: underline; -} - -/* itch */ - -.navbar-item-itch:link { - color: #e06c75; - text-decoration: none; -} - -.navbar-item-itch:visited { - color: #e06c75; - text-decoration: none; -} - -.navbar-item-itch:hover { - color: #ef7a80; - text-decoration: underline; -} - -.navbar-item-itch:active { - color: #ef7a90; - text-decoration: underline; -} - -/* twitter */ - -.navbar-item-twitter:link { - text-decoration: none; -} - -.navbar-item-twitter:visited { - text-decoration: none; -} - -.navbar-item-twitter:hover { - text-decoration: underline; -} - -.navbar-item-twitter:active { - text-decoration: underline; -} - -/* mastodon */ - -.navbar-item-mastodon:link { - color: #6a4ae0; - text-decoration: none; -} - -.navbar-item-mastodon:visited { - color: #6a4ae0; - text-decoration: none; -} - -.navbar-item-mastodon:hover { - color: #7a55e8; - text-decoration: underline; -} - -.navbar-item-mastodon:active { - color: #7a55e8; - text-decoration: underline; -} - -/* cohost */ - -.navbar-item-cohost:link { - color: #b63b73; - text-decoration: none; -} - -.navbar-item-cohost:visited { - color: #b63b73; - text-decoration: none; -} - -.navbar-item-cohost:hover { - color: #c54a7f; - text-decoration: underline; -} - -.navbar-item-cohost:active { - color: #c54a7f; - text-decoration: underline; -} - -/* tumblr */ - -.navbar-item-tumblr:link { - color: #00b8ff; - text-decoration: none; -} - -.navbar-item-tumblr:visited { - color: #00b8ff; - text-decoration: none; -} - -.navbar-item-tumblr:hover { - color: #00c5ff; - text-decoration: underline; -} - -.navbar-item-tumblr:active { - color: #00c5ff; - text-decoration: underline; -} - -/* contact */ - -.navbar-item-contact:link { - color: #e5c07b; - text-decoration: none; -} - -.navbar-item-contact:visited { - color: #e5c07b; - text-decoration: none; -} - -.navbar-item-contact:hover { - color: #f2ce89; - text-decoration: underline; -} - -.navbar-item-contact:active { - color: #f2ce89; - text-decoration: underline; -} diff --git a/front/src/components/navbar.tsx b/front/src/components/navbar.tsx deleted file mode 100644 index ba3d7d7..0000000 --- a/front/src/components/navbar.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import './navbar.css'; - -import { NavbarItem } from './navbar-item'; - -export function Navbar() { - return ( - - ); -} diff --git a/front/src/components/project.css b/front/src/components/project.css deleted file mode 100644 index 89ce30f..0000000 --- a/front/src/components/project.css +++ /dev/null @@ -1,137 +0,0 @@ -.icon { - display: inline; - width: 32px; - height: 32px; - transition: 0.3s; - transform-origin: center; - filter: brightness(70%) -} - -.icon:hover { - filter: brightness(80%); -} - -.icon-row { - width: 320px; - height: 36px; -} - -.icon-container { - height: 36px; - float: right; -} - -.icon-text { - width: auto; - height: 36px; - line-height: 36px; - float: left; - vertical-align: middle; - margin-right: 8px; - color: #5c6370; -} - -.projects-container { - width: 100%; - max-width: 1120px; - margin: auto; - margin-top: 24pt; - margin-bottom: 48pt; - align-items: center; - justify-content: center; - align-self: center; -} - -.project { - display: table; - align-self: center; - clear: both; - margin-bottom: 24pt; -} - -.project-info { - font-size: 14pt; -} - -.project-description { - font-size: 16pt; - text-align: justify; -} - -.project-image-gallery { - margin-left: 24px; - margin-right: 10px; -} - -@media (max-width: 1150px) { - .project-title { - text-align: center; - font-size: 24pt; - margin-bottom: 8px; - text-decoration-line: underline; - } - - .project-image-gallery { - margin: 60px auto; - width: 330px; - height: 220px; - } - - .project-info { - float: none; - width: 90%; - margin: auto; - } - - .project-description { - font-size: 14pt; - } -} - -@media (max-width: 1150px) and (min-width: 480px) { - .project-title { - text-align: center; - font-size: 24pt; - margin-bottom: 8px; - text-decoration-line: underline; - } - .project-image-gallery { - margin: 60px auto; - width: 480px; - height: 360px; - } - - .project-info { - float: none; - width: 90%; - margin: auto; - } - - .project-description { - font-size: 14pt; - } -} - -@media (min-width: 1150px) { - .project-title { - text-align: left; - font-size: 32pt; - margin-bottom: 8px; - text-decoration-line: underline; - } - .project-image-gallery { - float: right; - width: 480px; - height: 360px; - } - .project-info { - float: left; - max-width: 600px; - } - - .project-description { - font-size: 16pt; - } -} - - diff --git a/front/src/components/project.tsx b/front/src/components/project.tsx deleted file mode 100644 index cd5cb89..0000000 --- a/front/src/components/project.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import Carousel from "./carousel"; -import './project.css'; - -enum ProjectType { - GAME = "game", - PROJECT = "project", -} - -export enum ProjectTech { - CSHARP = "csharp", - RUST = "rust", - C = "c", - CPP = "cpp", - JAVASCRIPT = "javascript", - TYPESCRIPT = "typescript", - HTML = "html", - CSS = "css", - - PREACT = "preact", - UNITY = "unity", - GODOT = "godot", - MONOGAME = "monogame", -} - -export enum ProjectTarget { - WEB = "html5", - WINDOWS = "windows", - LINUX = "linux", - MACOS = "macos", - ANDROID = "android", - XBOX = "xbox", - PLAYSTATION = "playstation", - SWITCH = "switch", - HYPRLAND = "hyprland", -} - -export interface ProjectDescriptor { - name: string; - name_normalized: string; - type: ProjectType; - link: string; - tech: ProjectTech[]; - targets: ProjectTarget[]; - images: string[]; - description: string; -} - -function getProjectImageLink(project: ProjectDescriptor, image: string) { - return `assets/${project.type}s/${project.name_normalized}/${image}`; -} - -function getProjectTechIconLink(tech: ProjectTech) { - return `assets/images/${tech}.png`; -} - -function getProjectTargetIconLink(target: ProjectTarget) { - return `assets/images/${target}.png`; -} - -export function Project(props: ProjectDescriptor) { - return ( -
- -
-
-
Made using
-
- {props.tech.map((tech) => ( - - ))} -
-
-
-
Available on
-
- {props.targets.map((target) => ( - - ))} -
-
-
-
- { - // use description as html -
- } -
-
- {props.images && props.images.length > 0 && - - {props.images.map((image) => ( - - ))} - - } -
- ); -} diff --git a/front/src/data/games.json b/front/src/data/games.json deleted file mode 100644 index 0e6a070..0000000 --- a/front/src/data/games.json +++ /dev/null @@ -1,229 +0,0 @@ -[ - { - "name": "Mr Final Boss", - "name_normalized": "mr-final-boss", - "type": "game", - "link": "https://jellingfish-games.itch.io/mr-final-boss", - "tech": [ - "unity", - "csharp" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "thumbnail.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png", - "screenshot4.png" - ], - "description": "The legends say that one day, brave Heroes will slay the evil and malicious Ignatius, the Chaos Bringer... But YOU won't go down without a fight! Be the bossfight everyone is dreading and hunt down as many Heroes as you can in your last stand using a variety of abilities you can choose from!
Game made in 72 hours for Ludum Dare 50, with the theme \"Delay the Inevitable\"." - }, - { - "name": "BUMBLING BUILDERS", - "name_normalized": "bumbling-builders", - "type": "game", - "link": "https://oroshibu.itch.io/bumbling-builders", - "tech": [ - "unity", - "csharp" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "thumbnail.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png" - ], - "description": "A physics puzzle game in which you need to protect little creatures from danger that could come from any direction. Build forts with tetris-style blocks. The game features 30+ levels, multiple distinct enemies and a star rating system.
Game made in 72 hours for Ludum Dare 49, with the theme \"Unstable\"." - }, - { - "name": "LOUD: My Road To Fame", - "name_normalized": "loud", - "type": "game", - "link": "https://store.steampowered.com/app/1838290/LOUD_My_Road_to_Fame/", - "tech": [ - "unity", - "csharp" - ], - "targets": [ - "windows", - "xbox", - "playstation", - "switch" - ], - "images": [ - "thumbnail.jpg", - "screenshot1.jpg", - "screenshot2.jpg", - "screenshot3.jpg" - ], - "description": "A wholesome, music-filled arcade rhythm game in which a young, reclusive rocker goes on a journey of self-discovery. Once she begins to follow her dreams and finds her inner voice, she discovers that it is LOUD!
One of the games I've worked on at Hyperstrange" - }, - { - "name": "WUZMAG", - "name_normalized": "wuzmag", - "type": "game", - "link": "https://duckonaut.itch.io/wuzmag", - "tech": [ - "unity", - "csharp" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "thumbnail.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png" - ], - "description": "Turn based arcade survival game. Survive as long as you can by freezing enemies and using them to defeat more enemies.
Game made in roughly 8 hours for a private game jam with friends." - }, - { - "name": "Miro", - "name_normalized": "miro", - "type": "game", - "link": "https://duckonaut.itch.io/miro", - "tech": [ - "monogame", - "csharp" - ], - "targets": [ - "windows" - ], - "images": [ - "thumbnail.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png" - ], - "description": "Small chill game made mostly as an experiment for a nice 2D renderer mechanic. Infect the world around you, breaking it down into its simplest components.
Game made in roughly 8 hours for a private game jam with friends." - }, - { - "name": "Thermal Trail", - "name_normalized": "thermal-trail", - "type": "game", - "link": "https://duckonaut.itch.io/thermal-trail", - "tech": [ - "godot", - "csharp" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "gameart.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png", - "screenshot4.png" - ], - "description": "Play as Yolka, a mountain goat who found an unknown egg. Keep the egg warm as you navigate the 3 distinct worlds, and bring it to the hottest place you know: the depths of a volcano.
Game made in a week for Newgrounds July Jam 2021, with the theme \"Egg\"." - }, - { - "name": "Greachers", - "name_normalized": "greachers", - "type": "game", - "link": "https://duckonaut.itch.io/greachers", - "tech": [ - "monogame", - "csharp" - ], - "targets": [ - "windows" - ], - "images": [ - "title.png", - "screenshot1.png", - "screenshot2.png", - "screenshot3.png" - ], - "description": "Tiny idle simulation game where you manage a team of randomly generated little fellas as they fight other greachers in a sidescrolling world with beautiful procedurally generated graphics.
Game made in 2 weeks for LOWREZJAM 2021, with the theme \"Minibeasts\"." - }, - { - "name": "Third Party", - "name_normalized": "third-party", - "type": "game", - "link": "https://duckonaut.itch.io/third-party", - "tech": [ - "godot" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "thumbnail.png", - "screenshot1.jpg", - "screenshot2.jpg", - "screenshot3.jpg", - "screenshot4.jpg" - ], - "description": "A top-down stealth game where you play as a spy tasked with stealing important data from a rivaling government. Your task would be easy enough if your objective wasn’t in a underground top-secret facility handling an alien outbreak. Without access to conventional stealth techniques, use corpses of your enemies to sneak through the battlefield.
Game made in 72 hours for Ludum Dare 48, with the theme \"Deeper and deeper\"." - }, - { - "name": "Your Left", - "name_normalized": "your-left", - "type": "game", - "link": "https://xatriv.itch.io/your-left", - "tech": [ - "unity", - "csharp" - ], - "targets": [ - "windows" - ], - "images": [ - "thumbnail.png", - "screenshot1.jpg", - "screenshot2.jpg", - "screenshot3.jpg" - ], - "description": "A simple pacman-inspired arcade game. Try to grab all the stars in a randomly generated maze before the time expires, while your controls are scattered all over the screen. Get as far as you can to get the highest score.
Game made in 8 hours for Jam Jam, a local in-person event organized by KNTG Polygon, with the theme \"One Click\"." - }, - { - "name": "Riff n' Rage", - "name_normalized": "riff-n-rage", - "type": "game", - "link": "https://duckonaut.itch.io/riff-n-rage", - "tech": [ - "monogame", - "csharp" - ], - "targets": [ - "windows" - ], - "images": [ - "thumbnail.png", - "screenshot1.png", - "screenshot2.png" - ], - "description": "You just got your first guitar, and through sheer luck managed to land in the king's throne room, trying to entertain him. Sadly, his subjects aren't huge fans of your music. Dodge them while trying to play the best you can, or the king won't be merciful.
Game made in 48 hours for a special solo game jam among friends. My theme was \"Power at a price\"." - }, - { - "name": "Survive the Temple", - "name_normalized": "survive-the-temple", - "type": "game", - "link": "https://duckonaut.itch.io/survive-the-temple", - "tech": [ - "godot" - ], - "targets": [ - "windows", - "html5" - ], - "images": [ - "cover.png", - "screenshot.png" - ], - "description": "A quick movement focused platformer that tests your short term memory. Survive the trap system of an ancient temple! Dash through the lanterns in the correct order before the time runs out, or face certain death!
Game made in 48 hours for Ludum Dare Compo 47 with the theme \"Stuck in a loop\"." - } -] diff --git a/front/src/data/projects.json b/front/src/data/projects.json deleted file mode 100644 index b31b164..0000000 --- a/front/src/data/projects.json +++ /dev/null @@ -1,53 +0,0 @@ -[ - { - "name": "hyprload", - "name_normalized": "hyprload", - "type": "project", - "link": "https://github.com/duckonaut/hyprload", - "tech": [ - "cpp" - ], - "targets": [ - "linux", - "hyprland" - ], - "images": [ - "logo.png" - ], - "description": "hyprload acts as a plugin manager for the Hyprland Wayland Compositor. It's loaded as a plugin and allows easy, declarative installation and updates of other plugins." - }, - { - "name": "split-monitor-workspaces", - "name_normalized": "split-monitor-workspaces", - "type": "project", - "link": "https://github.com/duckonaut/split-monitor-workspaces", - "tech": [ - "cpp" - ], - "targets": [ - "linux", - "hyprland" - ], - "description": "A small plugin for the Hyprland Wayland Compositor that allows you to have different workspace namespaces on different monitors." - }, - { - "name": "Spirit Mod", - "name_normalized": "spirit-mod", - "type": "project", - "link": "https://spiritmod.fandom.com/wiki/Spirit_Mod_Wiki", - "tech": [ - "csharp" - ], - "targets": [ - "windows", - "linux", - "macos" - ], - "images": [ - "thumbnail.png", - "demo1.gif", - "demo2.gif" - ], - "description": "The Spirit Mod is one of the largest mods for Terraria: with more than 1300 items, 8 bosses, and hundreds of enemies, as well as 3 new events and 3 brand new biomes, the mod has a lot to offer.
I had the privilege of contributing some system code, mainly the \"Stargoop\" system." - } -] diff --git a/front/src/index.css b/front/src/index.css deleted file mode 100644 index 9941a36..0000000 --- a/front/src/index.css +++ /dev/null @@ -1,108 +0,0 @@ -:root { - font-weight: 400; - - color-scheme: dark; - color: var(--color-fg); - background-color: var(--color-bg); - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-text-size-adjust: 100%; - - /* variables */ - --color-bg: #161f30; - --color-fg: #a3b3d9; - --color-search-blue: #083C5A; - --color-white: #a3b3d9; - --color-gray: #647089; - --color-dark-gray: #3e4451; - --color-context: #6b737f; - --color-light-gray: #c8ccd4; - --color-tree-gray: #1b1f27; - --color-blue: #6080dd; - --color-vivid-blue: #61afef; - --color-dark-blue: #223E55; - --color-folder-blue: #61afef; - --color-light-blue: #a3b3d9; - --color-green: #449871; - --color-cyan: #56b6c2; - --color-light-green: #98c379; - --color-red: #c13251; - --color-orange: #c18a56; - --color-light-red: #e06c75; - --color-yellow: #e5c07b; - --color-purple: #604bd8; - --color-magenta: #b071fc; -} - -a:link { - font-weight: 500; - color: #4fc1ff; - text-decoration: inherit; -} - -a:visited { - color: #4fc1ff; -} - -a:hover { - color: #60d2ff; -} - -a:active { - color: #66d8ff; -} - - -body { - margin: 0; - /* display: flex; */ - /* place-items: center; */ - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -span { - display: inline; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -.hack { - font-family: Hack, monospace; - font-weight: 500; -} - -.grow { - transition: all .2s ease-in-out; - transform: scale(1); -} - -.grow:hover { - transition: all .2s ease-in-out; - transform: scale(1.1); -} diff --git a/front/src/main.tsx b/front/src/main.tsx deleted file mode 100644 index 846cd1e..0000000 --- a/front/src/main.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { render } from 'preact' -import { App } from './app.tsx' -import './index.css' - -render(, document.getElementById('app')!) diff --git a/front/src/pages/contact.css b/front/src/pages/contact.css deleted file mode 100644 index 93b63bd..0000000 --- a/front/src/pages/contact.css +++ /dev/null @@ -1,22 +0,0 @@ -.contact-container { - width: 100%; - max-width: 1120px; - margin: auto; - margin-top: 24pt; - margin-bottom: 48pt; - align-items: center; - justify-content: center; - align-self: center; - font-size: 18pt; -} - -.contact { - margin-top: 24pt; - margin-bottom: 8pt; - font-size: 20pt; - color: #98C379; -} - -.highlight { - color: #e5c07b; -} diff --git a/front/src/pages/contact.tsx b/front/src/pages/contact.tsx deleted file mode 100644 index efc9eba..0000000 --- a/front/src/pages/contact.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import './contact.css'; - -export default function Contact() { - return ( -
-
- Contact -
-
-
- Discord -
- - usually the fastest way to reach me -
- EchoDuck#7866 - -
- Matrix -
- for the FOSS folks -
- @echoduck:matrix.org - -
- Email -
- I check my email daily -
- duckonaut@gmail.com -
-
- ); -} diff --git a/front/src/pages/games.css b/front/src/pages/games.css deleted file mode 100644 index e69de29..0000000 diff --git a/front/src/pages/games.tsx b/front/src/pages/games.tsx deleted file mode 100644 index 6d0d2bd..0000000 --- a/front/src/pages/games.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Project, ProjectDescriptor } from '../components/project'; -import projectsJson from '../data/games.json'; - -const projects: ProjectDescriptor[] = projectsJson as ProjectDescriptor[]; - -export default function Games() { - return ( - <> -
-
- Game Projects -
-
- games I've worked on -
-
- { - projects.map((project) => ( - Project(project) - )) - } -
-
- - ); -} - diff --git a/front/src/pages/home.tsx b/front/src/pages/home.tsx deleted file mode 100644 index c44cef9..0000000 --- a/front/src/pages/home.tsx +++ /dev/null @@ -1,29 +0,0 @@ -export default function Home() { - return ( - <> -
-
- Stanisław Zagórowski -
-
- aka Duckonaut, EchoDuck -
- - -
-

- Hello! I'm a programmer, game designer, and artist. I'm currently a student at the Warsaw University of - Technology, studying Computer Science. A list of the games I've worked on is in the games section. Other projects I've been a part of are available in the projects section. - I also enjoy some lower-level programming and learning about the inner workings of various systems. The main - technologies I use are C#, Unity - , Python, Rust and C, - although I'm also familiar with Godot, C++ - , Java and some JavaScript and TypeScript. -

-
-
- - ); -} diff --git a/front/src/pages/projects.tsx b/front/src/pages/projects.tsx deleted file mode 100644 index 2753f91..0000000 --- a/front/src/pages/projects.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Project, ProjectDescriptor } from '../components/project'; -import projectsJson from '../data/projects.json'; - -const projects: ProjectDescriptor[] = projectsJson as ProjectDescriptor[]; - -export default function Projects() { - return ( - <> -
-
- Other Projects -
-
- projects that are not games -
- -
- { - projects.map((project) => ( - Project(project) - )) - } -
-
- - ); -} diff --git a/front/src/vite-env.d.ts b/front/src/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/front/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// -- cgit v1.3.1