diff --git a/api/.env.example.ini b/api/.env.example.ini index 3763bb0..163a056 100755 --- a/api/.env.example.ini +++ b/api/.env.example.ini @@ -5,10 +5,4 @@ pass = "" [databases] vlw = "" -battlestation = "" - -[github] -api_key = "" -# Use-Agent string sent to GitHub API -# They recommend setting it to your GitHub username or app name -user_agent = "" \ No newline at end of file +battlestation = "" \ No newline at end of file diff --git a/api/src/databases/VLWdb.php b/api/src/databases/VLWdb.php index 42892c8..5286539 100755 --- a/api/src/databases/VLWdb.php +++ b/api/src/databases/VLWdb.php @@ -61,7 +61,7 @@ } // Mutate the value by array key $property_name into a libmysqldriver\MySQL custom operator - // https://github.com/VictorWesterlund/php-libmysqldriver?tab=readme-ov-file#define-custom-operators + // https://codeberg.org/vlw/php-mysql#define-custom-operators public static function make_wildcard_search(string $property_name, array &$filters): array { // Bail out if property name is not set in filters array or if its value is null if (!array_key_exists($property_name, $filters) || $filters[$property_name] === null) { diff --git a/assets/css/pages/about.css b/assets/css/pages/about.css index 92739c8..560122f 100755 --- a/assets/css/pages/about.css +++ b/assets/css/pages/about.css @@ -41,6 +41,10 @@ section.about span.interests { animation: interests-hue 5s infinite linear; } +section.about p i:not(:hover) { + opacity: .3; +} + /* ## Version */ section.version { diff --git a/assets/css/pages/contact.css b/assets/css/pages/contact.css index 68c60e4..a1efd9a 100755 --- a/assets/css/pages/contact.css +++ b/assets/css/pages/contact.css @@ -12,12 +12,26 @@ vv-shell { gap: var(--padding); } +.fingerprint { + word-break: break-all; +} + /* # Sections */ vv-shell > svg { margin: var(--padding) 0; } +/* ## Modifiers */ + +section.center { + text-align: center; +} + +section.fade { + opacity: .3; +} + /* ## Social */ section.social { @@ -61,11 +75,14 @@ section.social social.hovering p { display: initial; } -/* ## OpenPGP key */ +/* ## PGP key */ section.pgp { max-width: 800px; position: relative; + display: flex; + flex-direction: column; + gap: var(--padding); text-align: center; background-color: rgba(var(--primer-color-accent), .15); padding: calc(var(--padding) * 1.5); @@ -81,13 +98,13 @@ section.pgp > svg { } section.pgp > p { - margin-bottom: var(--padding); - padding: var(--padding); + padding: 0 var(--padding); } section.pgp .buttons { display: flex; flex-direction: column; + margin-top: var(--padding); gap: var(--padding); } diff --git a/assets/css/pages/work.css b/assets/css/pages/work.css index 829ae93..1f68ed3 100755 --- a/assets/css/pages/work.css +++ b/assets/css/pages/work.css @@ -28,6 +28,7 @@ section.git { } section.git svg { + fill: white; width: 60px; } diff --git a/assets/media/icons/codeberg.svg b/assets/media/icons/codeberg.svg new file mode 100644 index 0000000..810e026 --- /dev/null +++ b/assets/media/icons/codeberg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/media/icons/github.svg b/assets/media/icons/github.svg deleted file mode 100755 index 88fffd2..0000000 --- a/assets/media/icons/github.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/about.php b/public/about.php index 49155b6..bed7288 100644 --- a/public/about.php +++ b/public/about.php @@ -5,29 +5,39 @@
-

I​'m a full-stack web developer from Sweden, currently working as IT-Lead at the biopharma start-up iCellate Medical in Solna, Stockholm. I also develop and maintain my own web framework and use it to build web apps and websites - including this one.

-

The <programming/markup/command>-languages I currently use the most are (in a mostly accurate decending order): PHP, JavaScript, CSS, MySQL, Python, SQLite, Bash, and [pure] HTML.

+

I​'m a full-stack web developer from Sweden.

+

The <programming/markup/command/query/whatever>-languages I currently use the most are (in a mostly accurate decending order): PHP, JavaScript, CSS, MySQL, TypeScript, Python, SQLite, Bash, and HTML.

This website

-

This site and all of its components are 100% free and open source software. The website is designed and built by me from the ground up on top of my own web and API frameworks. There are no cookies or trackers here. The only information I have about you is your public IP-address and which resources on this site your browser requests. None of this data is used for any kind of analytics.

-

Checkout the website source code on GitHub

+

This site and all of its components are 100% free and open source software. The website is designed and built by me from the ground up using my web and API frameworks as the foundation. You will find no cookies or trackers here. The only information I have about you is your public IP-address and which resources on this site your browser requests. None of this data is used for any kind of analytics.

+

See detailed information about all servers/services on this domain

Personal

-

With a cup of coffee ready at hand, I can at times become a real armchair detective for a variety of nerdy topics I find interesting, and spend hours reading as much as I can about them too. I like to skii when I'm not glued in front of a computer screen.

-

I do occationally game, and I also have a silent passion that comes out every few years for building gaming computers - even servers recently!

+

Coffee, of course.. and..

+

At times, I become a true, amateur, armchair detective for a variety of your typical-nerdy topics that I find interesting. And will spend a disproportionate to real-world-personal-use amount of time reading about that stuff too.

+

Another silent passion of mine that comes out every few years is building computers and fiddling with weird networking stuff.

+

And then of course I don't mind some occational gaming, and watching movies and TV-series.

Projects

-

Here are the projects I'm working on right now:

-

* Reflect: An API framework written in PHP - for PHP developers.

-

* Vegvisir: A web framework written in PHP and JavaScript - for PHP and JavaScript developers.

-

See more on my works page. And even more, including smaller projects on my GitHub profile.

+

Here are some projects I'm working on right now:

+

* Vegvisir: A web navigation framework for PHP.

+

* Reflect: A REST API framework for PHP developers.

+

There is more stuff on my works page and even more stuff on my Codeberg profile.

+

and even EVEN more stuff on my Forgejo

+
+
+
+

GitHub

+

I have given up GitHub for their increasing number of injustices againts its users, last betrayal being GitHub's for-profit "Copilot" product which was illegaly trained on copylefted software on its platform.

+

I signed up and started using GitHub before I became aware of how opressive to to its users and deceptive their business model is. I wasn't aware of the situation.

+

While I am a bit skeptical to do this in case history repeats itself; [most of] my work is now on Codeberg instead. Unfortunately some things like old pull-requests, issues, and branch archives can not be migrated completely.


-

Let's work on something together or just have a chat. Write me a line!

+

Let's work on something together or just have a chat? Write me a line!


@@ -35,18 +45,19 @@
diff --git a/public/about/version.php b/public/about/version.php index b5e3c4b..713f99a 100644 --- a/public/about/version.php +++ b/public/about/version.php @@ -14,4 +14,4 @@ $version = end($dir); ?> - \ No newline at end of file + \ No newline at end of file diff --git a/public/contact.php b/public/contact.php index 12343f7..a084795 100644 --- a/public/contact.php +++ b/public/contact.php @@ -15,11 +15,50 @@ // Connect to VLW API $api = new API(); + class Date extends DateTimeImmutable { + private const AVAILABLE_TO_HOUR = 16; + private const AVAILABLE_FROM_HOUR = 10; + + private const REPLY_TIME_HOURS_AVAILABLE = 2; + + public function __construct() { + // Set DateTime for configured timezone + parent::__construct("now", new DateTimeZone($_ENV["time"]["date_time_zone"])); + } + + // Return current hour in 24-hour format + private function get_hour(): int { + return (int) $this->format("G"); + } + + // Returns true if current time is between available from and to hours + public function is_available(): bool { + return $this->get_hour() >= self::AVAILABLE_FROM_HOUR && $this->get_hour() < self::AVAILABLE_TO_HOUR; + } + + public function get_estimated_reply_hours(): int { + // I'm available! Return the estimated reply time for that + if ($this->is_available()) { + return self::REPLY_TIME_HOURS_AVAILABLE; + } + + $hour = $this->get_hour(); + + return $hour < self::AVAILABLE_FROM_HOUR + // Return hours past midnight until I become available (clamped to estimated reply hours) + ? max(self::AVAILABLE_FROM_HOUR - $hour, self::REPLY_TIME_HOURS_AVAILABLE) + // Return hours before midnight until I become available (clamped to estimated reply hours) + : max(self::AVAILABLE_FROM_HOUR + (24 - $hour), self::REPLY_TIME_HOURS_AVAILABLE); + } + } + + $date = new Date(); + ?>
-

Let's chat

-

The best way to get in touch is by email, or with the form on this page. I will try to reply as quickly as possible, probably within a few hours. The time is format("h:i a") ?> in Sweden right now.

+

Let's chat!

+

The best way to get in touch is definitely by email, or through the form on this page. The time in Sweden is format("h:i a") ?> right now, I am currently is_available() ? "available" : "not available" ?> and will hopefully reply in about get_estimated_reply_hours() ?> hours.

@@ -38,13 +77,19 @@
-

encrypt your message with my OpenPGP key.

-

my key is also listed on the openPGP key server for victor@vlw.se so your e-mail client can automatically retreive it if supported.

+

encrypt your message with PGP

+

Please consider encrypting your message with my PGP key, even if your message doesn't contain anything sensitive. The key is also available via WKD, and is listed on the openPGP key server for victor@vlw.se.

+

Fingerprint for victor@vlw.se
DCE987311CB5D2A252F58951D0AD730E1057DFC6

+
+

Fingerprint for info@vlw.se

+

For reference only, please don't send personal emails to this address

+

DC603DA049903D707B7F1DB39AF727FB576F5A00

+
diff --git a/public/work.php b/public/work.php index 8cfe964..b6e45ae 100644 --- a/public/work.php +++ b/public/work.php @@ -34,11 +34,11 @@
- -

Most of my free open-source software is available on GitHub and it's also mirrored on my server

+ +

Most of my free open-source software has been moved from GitHub to Codeberg. I also have a mirror of everything and some smaller projects on Forgejo.

diff --git a/shells/document.php b/shells/document.php index 3207ae2..a9e1927 100644 --- a/shells/document.php +++ b/shells/document.php @@ -41,7 +41,7 @@ - Victor L. Westerlund + Victor Westerlund