mirror of
https://codeberg.org/vlw/vlw.se.git
synced 2025-09-13 21:13:40 +02:00
feat(content): update texts and replace references to GitHub with Codeberg (#4)
This PR features a lot of text revisions, updated references to GitHub with Codeberg and more. Reviewed-on: https://codeberg.org/vlw/vlw.se/pulls/4 Co-authored-by: Victor Westerlund <victor.vesterlund@gmail.com> Co-committed-by: Victor Westerlund <victor.vesterlund@gmail.com>
This commit is contained in:
parent
6dad22f226
commit
7f4b54685e
12 changed files with 111 additions and 39 deletions
|
@ -6,9 +6,3 @@ 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 = ""
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ section.git {
|
|||
}
|
||||
|
||||
section.git svg {
|
||||
fill: white;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
|
|
1
assets/media/icons/codeberg.svg
Normal file
1
assets/media/icons/codeberg.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 5.6 KiB |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 98 98"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#fff"/></svg>
|
Before Width: | Height: | Size: 957 B |
|
@ -5,29 +5,39 @@
|
|||
</section>
|
||||
<hr aria-hidden="true">
|
||||
<section class="about">
|
||||
<p>I​'m a full-stack web developer from Sweden, currently working as IT-Lead at the biopharma start-up <a href="https://icellate.com">iCellate Medical</a> in Solna, Stockholm. I also develop and maintain <a href="https://github.com/VictorWesterlund/vegvisir">my own web framework</a> and use it to build web apps and websites - including this one.</p>
|
||||
<p>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.</p>
|
||||
<p>I​'m a full-stack web developer from Sweden.</p>
|
||||
<p>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.</p>
|
||||
</section>
|
||||
<section class="about">
|
||||
<h2>This website</h2>
|
||||
<p>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 <a href="https://github.com/victorwesterlund/vegvisir">web</a> and <a href="https://github.com/victorwesterlund/reflect">API</a> frameworks. There are <i>no cookies or trackers</i> 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.</p>
|
||||
<p><a href="https://github.com/victorwesterlund/vlw.se">Checkout the website source code on GitHub</a></p>
|
||||
<p>This site and all of its components are <a href="https://codeberg.org/vlw/vlw.se">100% free and open source software</a>. The website is designed and built by me from the ground up using my <a href="https://vegvisir.vlw.se">web</a> and <a href="https://reflect.vlw.se">API</a> 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.</p>
|
||||
<p><a href="https://srv.vlw.se"><i>See detailed information about all servers/services on this domain</i></a></p>
|
||||
</section>
|
||||
<section class="about">
|
||||
<h2>Personal</h2>
|
||||
<p>With a cup of coffee ready at hand, I can at times become a real armchair detective for a <span class="interests">variety of nerdy topics I find interesting</span>, 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.</p>
|
||||
<p>I do occationally game, and I also have a silent passion that comes out every few years for <a href="/about/battlestation" vv="about" vv-call="navigate">building gaming computers</a> - even servers recently!</p>
|
||||
<p>Coffee, of course.. and..</p>
|
||||
<p>At times, I become a true, amateur, armchair detective for a <span class="interests">variety of your typical-nerdy topics that I find interesting</span>. And will spend a disproportionate to real-world-personal-use amount of time reading about that stuff too.</p>
|
||||
<p>Another silent passion of mine that comes out every few years is <a href="/about/battlestation" vv="about" vv-call="navigate">building computers</a> and fiddling with weird networking stuff.</p>
|
||||
<p>And then of course I don't mind some occational gaming, and watching movies and TV-series.</p>
|
||||
</section>
|
||||
<section class="about">
|
||||
<h2>Projects</h2>
|
||||
<p>Here are the projects I'm working on right now:</p>
|
||||
<p>* <a href="https://github.com/victorwesterlund/reflect">Reflect</a>: An API framework written in PHP - for PHP developers.</p>
|
||||
<p>* <a href="https://github.com/victorwesterlund/vegvisir">Vegvisir</a>: A web framework written in PHP and JavaScript - for PHP and JavaScript developers.</p>
|
||||
<p>See more on my <a href="work" vv="about" vv-call="navigate">works page</a>. And even more, including smaller projects on <a href="https://github.com/VictorWesterlund">my GitHub profile</a>.</p>
|
||||
<p>Here are some projects I'm working on right now:</p>
|
||||
<p>* <a href="https://vegvisir.vlw.se">Vegvisir</a>: A web navigation framework for PHP.</p>
|
||||
<p>* <a href="https://reflect.vlw.se">Reflect</a>: A REST API framework for PHP developers.</p>
|
||||
<p>There is more stuff on my <a href="work" vv="about" vv-call="navigate">works page</a> and even more stuff on <a href="https://codeberg.org/vlw">my Codeberg profile</a>.</p>
|
||||
<p><a href="https://git.vlw.se/vlw"><i>and even EVEN more stuff on my Forgejo</i></a></p>
|
||||
</section>
|
||||
<hr>
|
||||
<section class="about">
|
||||
<h3>GitHub</h3>
|
||||
<p>I have <a href="https://giveupgithub.com" target="_blank" rel="noopener noreferer">given up GitHub</a> 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.</p>
|
||||
<p>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.</p>
|
||||
<p>While I am a bit skeptical to do this in case history repeats itself; [most of] <a href="https://codeberg.org/vlw">my work is now on Codeberg</a> instead. Unfortunately some things like old pull-requests, issues, and branch archives can not be migrated completely.</p>
|
||||
</section>
|
||||
<hr>
|
||||
<section>
|
||||
<p>Let's work on something together or just have a chat. <a href="contact" vv="about" vv-call="navigate">Write me a line!</a></p>
|
||||
<p>Let's work on something together or just have a chat? <a href="contact" vv="about" vv-call="navigate">Write me a line!</a></p>
|
||||
</section>
|
||||
<hr>
|
||||
<section class="version">
|
||||
|
@ -35,18 +45,19 @@
|
|||
</section>
|
||||
|
||||
<div class="interests" aria-hidden="true">
|
||||
<p>practical engineering</p>
|
||||
<p>SSTV</p>
|
||||
<p>music</p>
|
||||
<p>astronomy</p>
|
||||
<p>electronics</p>
|
||||
<p>aviation</p>
|
||||
<p>maritime</p>
|
||||
<p>politics</p>
|
||||
<p>astronomy</p>
|
||||
<p>typography</p>
|
||||
<p>networking</p>
|
||||
<p>SSTV</p>
|
||||
<p>electronics</p>
|
||||
<p>simulations</p>
|
||||
<p>ISO 8601</p>
|
||||
<p>engineering</p>
|
||||
<p>photography</p>
|
||||
<p>videography</p>
|
||||
<p>ISO 8601</p>
|
||||
</div>
|
||||
<script type="module"><?= VV::js("assets/js/pages/about") ?></script>
|
||||
|
|
|
@ -14,4 +14,4 @@
|
|||
$version = end($dir);
|
||||
|
||||
?>
|
||||
<a href="https://github.com/victorwesterlund/vlw.se/releases/<?= $version ?>"><?= $version ?></a>
|
||||
<a href="https://codeberg.org/vlw/vlw.se/releases/tag/<?= $version ?>"><?= $version ?></a>
|
|
@ -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();
|
||||
|
||||
?>
|
||||
<style><?= VV::css("assets/css/pages/contact") ?></style>
|
||||
<section>
|
||||
<h1>Let's chat</h1>
|
||||
<p>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 <i><?= (new DateTime("now", new DateTimeZone($_ENV["time"]["date_time_zone"])))->format("h:i a") ?></i> in Sweden right now.</p>
|
||||
<h1>Let's chat!</h1>
|
||||
<p>The best way to get in touch is definitely by email, or through the form on this page. The time in Sweden is <i><?= $date->format("h:i a") ?></i> right now, I am currently <?= $date->is_available() ? "available" : "not available" ?> and will hopefully reply in about <?= $date->get_estimated_reply_hours() ?> hours.</p>
|
||||
</section>
|
||||
<section class="social">
|
||||
<a href="mailto:victor@vlw.se"><social>
|
||||
|
@ -38,13 +77,19 @@
|
|||
<?= VV::embed("assets/media/line.svg") ?>
|
||||
<section class="pgp">
|
||||
<?= VV::embed("assets/media/icons/pin.svg") ?>
|
||||
<h3>encrypt your message with my OpenPGP key.</h3>
|
||||
<p>my key is also listed on the <a href="https://keys.openpgp.org/search?q=victor%40vlw.se" target="_blank" rel="noopener noreferer">openPGP key server</a> for victor@vlw.se so your e-mail client can automatically retreive it if supported.</p>
|
||||
<h3>encrypt your message with PGP</h3>
|
||||
<p>Please consider encrypting your message with my PGP key, even if your message doesn't contain anything sensitive. The key is also available via <a href="https://wiki.gnupg.org/WKD" target="_blank" rel="noopener noreferer">WKD</a>, and is listed on the <a href="https://keys.openpgp.org/search?q=victor%40vlw.se" target="_blank" rel="noopener noreferer">openPGP key server</a> for victor@vlw.se.</p>
|
||||
<p>Fingerprint for victor@vlw.se<br><strong class="fingerprint">DCE987311CB5D2A252F58951D0AD730E1057DFC6</strong></p>
|
||||
<div class="buttons">
|
||||
<a href="https://keys.openpgp.org/vks/v1/by-fingerprint/DCE987311CB5D2A252F58951D0AD730E1057DFC6"><button class="inline solid">download ASC</button></a>
|
||||
<a href="https://emailselfdefense.fsf.org/en/" target="_blank" rel="noopener noreferer"><button class="inline">more info</button></a>
|
||||
<a href="https://emailselfdefense.fsf.org/en/" target="_blank" rel="noopener noreferer"><button class="inline">email encryption guide</button></a>
|
||||
</div>
|
||||
</section>
|
||||
<section class="center fade">
|
||||
<p>Fingerprint for info@vlw.se</p>
|
||||
<p>For reference only, please don't send personal emails to this address</p>
|
||||
<p><strong class="fingerprint">DC603DA049903D707B7F1DB39AF727FB576F5A00</strong></p>
|
||||
</section>
|
||||
<?= VV::embed("assets/media/line.svg") ?>
|
||||
|
||||
<?php // Send message on POST request ?>
|
||||
|
|
|
@ -34,11 +34,11 @@
|
|||
<style><?= VV::css("assets/css/pages/work") ?></style>
|
||||
|
||||
<section class="git">
|
||||
<?= VV::embed("assets/media/icons/github.svg") ?>
|
||||
<p>Most of my free open-source software is available on GitHub and it's also mirrored on my server</p>
|
||||
<?= VV::embed("assets/media/icons/codeberg.svg") ?>
|
||||
<p>Most of my free open-source software has been <a href="https://giveupgithub.com">moved from GitHub</a> to Codeberg. I also have a mirror of everything and some smaller projects on Forgejo.</p>
|
||||
<div class="buttons">
|
||||
<a href="https://github.com/victorwesterlund"><button class="inline solid">open GitHub</button></a>
|
||||
<a href="https://git.vlw.se"><button class="inline">mirror</button></a>
|
||||
<a href="https://codeberg.org/vlw"><button class="inline solid">Codeberg</button></a>
|
||||
<a href="https://git.vlw.se"><button class="inline">Forgejo</button></a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<style><?= VV::css("assets/css/fonts") ?></style>
|
||||
<style><?= VV::css("assets/css/shells/document") ?></style>
|
||||
|
||||
<title>Victor L. Westerlund</title>
|
||||
<title>Victor Westerlund</title>
|
||||
<link rel="icon" href="/assets/media/vw.svg"/>
|
||||
</head>
|
||||
<body>
|
||||
|
|
Loading…
Add table
Reference in a new issue