Compare commits

...

21 commits

Author SHA1 Message Date
fd82adc73e
Filter out flagged entries in the original query 2025-08-31 03:35:48 +01:00
49f9f7fd3c
fuck it, just do it in the blade template instead 2025-08-30 17:45:44 +01:00
288fe04e95
update deps 2025-08-30 17:43:56 +01:00
800898153d
temp "fix" 2025-08-30 05:01:29 +01:00
79d8294ba1
fix??????? 2025-08-30 04:57:18 +01:00
c89bf3bf1a
fix???? 2025-08-30 04:55:26 +01:00
ce45727b60
fix maybe 2025-08-30 04:46:17 +01:00
7ba32186cf
Dont show album art if url not defined 2025-08-30 04:34:41 +01:00
01cf40d1b8
it was a misinput 2025-08-30 04:28:14 +01:00
db05b1d4e7
increment ver 'cause i forgot 2025-08-30 04:21:41 +01:00
166fab652d
main: remove redundant % 2025-08-30 04:19:45 +01:00
310142efc3
misc: fix duped css property 2025-08-30 04:19:22 +01:00
3c05fe4248
misc: add peeking roscoe to files listing 2025-08-30 04:18:23 +01:00
81b43f3dca
main: make website bloo like british passports 2025-08-30 04:14:52 +01:00
05288f04aa
legacy: Add alice link to legacy 2025-08-29 23:46:42 +01:00
a4edd396f0
Hide album art if not available 2025-08-29 23:45:32 +01:00
57bb0e03a3
Add table-based legacy design 2025-08-10 02:54:16 +01:00
429314efba
Add ai.txt 2025-08-08 17:53:56 +01:00
af4a460ceb
Add webring 2025-08-04 18:03:25 +01:00
ffc8374b9f
Add servfail button 2025-07-23 00:05:10 +01:00
7ed667e941
oh my god.... 2025-07-03 22:47:03 +01:00
45 changed files with 1116 additions and 609 deletions

View file

@ -0,0 +1,15 @@
<?php
if (!function_exists('isLegacy')) {
/**
* Checks if the current hostname should return the legacy site
* @return bool
*/
function isLegacy(): bool {
return (
request()->getHost() === "legacy.wah.moe" || // Accessed via legacy.wah.moe domain
str_starts_with(request()->getHost(), "192.168") || // Accessed via local IP address
!request()->hasHeader("Host") // Browser does not send Host header (e.g. NCSA MOSAIC)
);
}
}

View file

@ -25,7 +25,7 @@ public function getCurrentTrack() {
$data = $response->json();
$track_data = $data["recenttracks"]["track"][0];
// $image = array_column($track_data["image"], null, 'size')['large'] ?? false;
$image = $track_data["image"][(array_key_last($track_data["image"]))] ?? false;
$image = end($track_data["image"]) ?? false;
$now_playing = false;
if (array_key_exists("@attr", $track_data)) {
$now_playing = $track_data["@attr"]["nowplaying"] == "true" ?? ["url"=>null];

View file

@ -8,7 +8,11 @@
class RoscoLekoController extends Controller {
public function getImages(): array {
$images = [];
foreach (File::glob(public_path('images/pandamonium').'/*') as $path) {
$path = 'images/pandamonium';
if (isLegacy()) {
$path = 'images/pandamonium-legacy';
}
foreach (File::glob(public_path($path).'/*') as $path) {
$image_data = [];
try {
$exif = exif_read_data($path);

View file

@ -24,12 +24,12 @@ public static function insertGuestbookEntry(Request $request) {
$newEntry->message = $request->get('message');
$newEntry->ip = $request->ip();
$newEntry->agent = $request->userAgent();
$newEntry->admin = auth()->check();
$newEntry->legacy_flagged = isLegacy();
$newEntry->save();
}
public static function selectEntries() {
$entries = GuestbookEntry::orderBy('created_at', 'desc')->get();
$entries = GuestbookEntry::where("legacy_flagged", false)->orderBy('created_at', 'desc')->get();
return $entries;
}

View file

@ -17,10 +17,16 @@ public function __construct() {}
* Get the view / contents that represent the component.
*/
public function render(): View|Closure|string {
if (isLegacy()) {
return view('components.layout-legacy', [
'isChristmas' => $this->isItChristmas()
]);
} else {
return view('components.layout', [
'isChristmas' => $this->isItChristmas()
]);
}
}
public function isItChristmas() : bool {
$currentDate = new DateTime();

View file

@ -17,6 +17,17 @@ public function __construct() {}
public function getWah(): string {
if (isLegacy()) {
try {
$response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
$data = $response->json();
if ($data == null) return "";
$path = parse_url("https://api.tinyfox.dev" . $data["loc"], PHP_URL_PATH);
return "//".request()->getHttpHost()."/proxy/wah/".basename($path);
} catch (Exception $ex) {
return "";
}
}
try {
$response = Http::get('https://api.tinyfox.dev/img.json?animal=wah');
$data = $response->json();
@ -26,7 +37,6 @@ public function getWah(): string {
} catch (Exception $ex) {
return "";
}
}
/**

View file

@ -6,6 +6,8 @@
"license": "MIT",
"require": {
"php": "^8.1",
"ext-exif": "*",
"browner12/helpers": "^3.7",
"guzzlehttp/guzzle": "^7.2",
"intervention/image": "^3.9",
"laravel/framework": "^10.10",
@ -13,8 +15,7 @@
"scrivo/highlight.php": "v9.18.1.10",
"spatie/laravel-honeypot": "^4.3",
"spatie/laravel-html": "^3.4",
"ua-parser/uap-php": "^3.9.14",
"ext-exif": "*"
"ua-parser/uap-php": "^3.9.14"
},
"require-dev": {
"fakerphp/faker": "^1.9.1",

1251
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@
return [
'name' => env('APP_NAME', 'wah.moe'),
'version' => '2025.06.12',
'version' => '2025.08.30-patch2',
'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false),
'url' => env('APP_URL', 'http://localhost'),
@ -25,6 +25,7 @@
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
browner12\helpers\HelperServiceProvider::class
])->toArray(),
'aliases' => Facade::defaultAliases()->merge([
])->toArray(),

104
public/ai.txt Normal file
View file

@ -0,0 +1,104 @@
#
# ai.txt
# Generated by Empathy First Media Digital Marketing Agency
# https://EmpathyFirstMedia.com
#
User-Agent: *
# Text Permissions
Disallow: *.txt
Disallow: *.pdf
Disallow: *.doc
Disallow: *.docx
Disallow: *.odt
Disallow: *.rtf
Disallow: *.tex
Disallow: *.wks
Disallow: *.wpd
Disallow: *.wps
Disallow: *.html
# Images Permissions
Disallow: *.bmp
Disallow: *.gif
Disallow: *.ico
Disallow: *.jpeg
Disallow: *.jpg
Disallow: *.png
Disallow: *.svg
Disallow: *.tif
Disallow: *.tiff
Disallow: *.webp
# Audio Permissions
Disallow: *.aac
Disallow: *.aiff
Disallow: *.amr
Disallow: *.flac
Disallow: *.m4a
Disallow: *.mp3
Disallow: *.oga
Disallow: *.opus
Disallow: *.wav
Disallow: *.wma
# Video Permissions
Disallow: *.mp4
Disallow: *.webm
Disallow: *.ogg
Disallow: *.avi
Disallow: *.mov
Disallow: *.wmv
Disallow: *.flv
Disallow: *.mkv
# Code Permissions
Disallow: *.py
Disallow: *.js
Disallow: *.java
Disallow: *.c
Disallow: *.cpp
Disallow: *.cs
Disallow: *.h
Disallow: *.css
Disallow: *.php
Disallow: *.swift
Disallow: *.go
Disallow: *.rb
Disallow: *.pl
Disallow: *.sh
Disallow: *.sql
# Disallow
Disallow: /
# --------------------------
# Empathy First Media AI.TXT
# --------------------------
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&@@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@&GGGGGGGGGGGGGGGGGGG#@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@& @@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@& @@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@& &@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# This ai.txt file was created by Empathy First Media.
# https://empathyfirstmedia.com/

View file

@ -1,7 +1,7 @@
body {
background-color: #f2efbd;
color: #2a271c;
color: #2f2f42;
margin: 20px;
background: #80c9fa url("/images/peek.png") no-repeat bottom right 10px fixed;
}
img {
@ -9,12 +9,12 @@ img {
}
a {
color: hsl(183, 93%, 27%);
color: #2f2f42;
text-decoration: underline dotted;
}
a:hover {
color: hsl(183, 93%, 15%);
color: #2f2f42;
text-decoration: underline solid;
}
@ -47,3 +47,8 @@ .description {
font-size: 90%;
}
hr {
border: none;
border-bottom: 2px solid #2f2f42;
}

View file

@ -1,14 +1,14 @@
:root {
--background: #f2efbd;
--foreground: #2a271c;
--border-color: #f27405;
--background: hsl(214, 67%, 85%);
--foreground: hsl(214, 20%, 14%);
--border-color: hsl(214, 96%, 48%);
--border: var(--border-color) 2px solid;
--shadow-color: hsla(11, 96%, 43%, 0.4);
--shadow-color: hsla(214, 96%, 43%, 0.4);
--shadow: drop-shadow(8px 8px var(--shadow-color));
--shadow-small: drop-shadow(3px 3px var(--shadow-color));
--links: hsl(92, 27%, 22%);
--links-hover: hsl(92, 27%, 15%)
--table-header: hsla(11, 96%, 43%, 0.2);
--links: hsl(214, 27%, 22%);
--links-hover: hsl(214, 27%, 15%);
--table-header: hsla(214, 96%, 43%, 0.2);
}
/* ───────────────────────────────────── Fonts ────────────────────────────────────── */
@ -74,7 +74,7 @@ #prideflag {
top: 0;
right: 0;
width: 120px;
transform-origin: 100% 0%;
transform-origin: 100% 0;
transition: transform .5s cubic-bezier(.32,1.63,.41,1.01);
z-index: 8008135;
}
@ -98,24 +98,13 @@ html {
body {
color: var(--foreground);
min-height: 100%;
background-color: hsla(0, 0%, 0%, 0);
padding: 10px;
font-family: "PT Serif";
background: url('/images/roscoe_tile.jpg');
padding: 5px;
font-family: "PT Serif", serif;
}
body::before {
content: "";
position: fixed;
top: 0;
left: 0;
background-image: url("/images/background.jpg");
width: 100%;
height: 100%;
z-index: -1;
opacity: 0.8;
background-size: cover;
background-attachment: fixed;
overflow: hidden;
img.logo_paw {
filter: grayscale(100%) sepia(100%) hue-rotate(180deg) saturate(300%);
}
h1,
@ -170,7 +159,7 @@ div.page-container > div:last-child {
header {
display: grid;
grid-template-columns: 66px 1fr;
grid-template-columns: 64px 1fr;
grid-template-rows: 1fr;
grid-column-gap: 15px;
grid-row-gap: 0;
@ -178,8 +167,6 @@ header {
}
header img {
filter: drop-shadow(2px 2px hsl(0, 0%, 66%));
margin-right: 10px;
image-rendering: pixelated;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

After

Width:  |  Height:  |  Size: 735 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

BIN
public/images/logo-v2.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

BIN
public/images/logo-v2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
public/images/peek.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/images/roscoe_tile.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
public/images/separator.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

View file

@ -16,7 +16,7 @@
<hr>
<ul>
@foreach($sites as $site)
<li><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</li>
<li><a href="{{ $site->url }}"><font color="#000000">{{ $site->name }}</font></a> - {{ $site->description }}</li>
@endforeach
</ul>
</div>

View file

@ -1,10 +1,34 @@
@if (isLegacy())
@php
$artUrl = null;
$path = parse_url($track["image"], PHP_URL_PATH);
if ($track["image"] !== "") {
$artUrl = "//" . request()->getHttpHost() . "/proxy/lastfm/" . basename($path);
}
@endphp
<table border="0" cellpadding="0" cellspacing="0"><tr>
@if ($artUrl !== null)
<td><img src="{{ $artUrl }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}" border="1"></td>
@endif
<td width="10px">&nbsp;</td>
<td>
<h2>{{ $track["header"] }}:</h2>
<a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
by {{ $track["artist"] }}<br>
</td>
</tr></table>
<br>
@else
<div class="current-track">
@if($track["image"] !== "")
<div>
<img src="{{ $track["image"] }}" alt="Album cover for {{ $track["title"] }} by {{ $track["artist"] }}">
</div>
@endif
<div>
<h2>{{ $track["header"] }}:</h2>
<a href="{{ $track["url"] }}">{{ $track["title"] }}</a><br>
<a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a><br>
by {{ $track["artist"] }}<br>
</div>
</div>
@endif

View file

@ -1,7 +1,12 @@
@if (isLegacy())
<table border="1" cellspacing="0" cellpadding="5">
<font size="+2"><b>Top 10 Tracks (Last 30 days):</b></font>
@else
<table class="music-top10">
<caption>
<h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2>
</caption>
@endif
<tr>
<th><b>#</b></th>
<th><b>Track</b></th>

View file

@ -1,6 +1,6 @@
<tr>
<td>{{ $count }}</td>
<td><a href="{{ $track["url"] }}">{{ $track["title"] }}</a></td>
<td><a href="{{ $track["url"] }}"><font color="#000000">{{ $track["title"] }}</font></a></td>
<td>{{ $track["artist"] }}</td>
<td>{{ $track["plays"] }}</td>
</tr>

View file

@ -20,7 +20,7 @@
Root: &nbsp;&nbsp;&nbsp;{!! url('') !!}<br>
Path: &nbsp;&nbsp;&nbsp;@if(Request::path() == "/")/@else/{{ Request::path() }}/@endif<br>
Epoch: &nbsp;&nbsp;{{ now()->timestamp }}<br>
Agent: &nbsp;&nbsp;Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0 </code>
Agent: &nbsp;&nbsp;{{ request()->userAgent() }}</code>
</td></tr></table>
<hr align="left">
<p>&copy; RoscoeDaWah 2021-2024</p>

View file

@ -0,0 +1,102 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--suppress ALL -->
<html>
<head>
<meta charset="utf-8">
<title>wah! (dot moe) - {{ $title }}</title>
</head>
<body background="/images/roscoe_tile.jpg" bgcolor="#6595fb" text="#000000" link="#FFFFFF" alink="#999999" vlink="#FFFFFF">
<table bgcolor="#6595fb" width="850px" cellpadding="0" cellspacing="0" border="0">
<!-- HEADER -->
<tr>
<td>
<table border="0" cellpadding="0" cellspacing="0" class="nopad">
<tr>
<td width="90px">
<img src="/images/logo-v2.gif">
</td>
<td valign="middle"><font color="#FFFFFF" face="sans-serif">
<font size="+10"><b><i>wah! (dot moe)</i></b></font><br>
<i>"i mean it looks alright, but then you realise its all tables" ~ <a href="https://nve.wtf/~alice/">alice</a></i>
</font></td>
</tr>
</table>
</td>
</tr>
<!-- HEADER END -->
<!-- TOP NAV -->
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#3366FF">&nbsp;</td>
<td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
<x-navigation></x-navigation>
</font></td>
<td width="5px" bgcolor="#3366FF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<!-- TOP NAV END -->
<!-- CONTENT -->
<tr><td height="5px" bgcolor="#FFFFFF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#FFFFFF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#FFFFFF">&nbsp;</td>
<td bgcolor="#ffffff" width="100%"><font face="sans-serif">
{{ $slot }}
</font></td>
<td width="5px" bgcolor="#FFFFFF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#FFFFFF"><font size="-2">&nbsp;</font></td></tr>
<!-- CONTENT END -->
<!-- BOTTOM NAV -->
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table bgcolor="#3366FF" border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px" bgcolor="#3366FF">&nbsp;</td>
<td bgcolor="#3366FF" width="100%"><font face="sans-serif" color="#FFFFFF">
<x-navigation></x-navigation>
</font></td>
<td width="5px" bgcolor="#3366FF" >&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px" bgcolor="#3366FF"><font size="-2">&nbsp;</font></td></tr>
<!-- BOTTOM NAV END -->
<!-- FOOTER -->
<tr><td height="5px"><font size="-2">&nbsp;</font></td></tr>
<tr>
<td>
<table border="0" class="nopad" cellpadding="0" cellspacing="0">
<tr>
<td width="10px">&nbsp;</td>
<td width="100%"><font face="sans-serif" color="#FFFFFF">
&copy; RoscoeDaWah 2021-2025
</font></td>
<td width="5px">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr><td height="5px"><font size="-2">&nbsp;</font></td></tr>
<!-- FOOTER END -->
</table>
</body>
</html>

View file

@ -27,7 +27,7 @@
<div id="header">
<header>
<div>
<img src="{{ asset('/images/logo.png') }}" width="65" alt="A pixel art depiction of a paw, in three alternating shades of orange.">
<img class="logo_paw" src="{{ asset('/images/logo-v2.png') }}" width="65" alt="A pixel art depiction of a paw, in three alternating shades of blue.">
</div>
<div>
<h1>wah!</h1>
@ -41,6 +41,7 @@
<div id="content">
<main>
{{ $slot }}
<div class="clear"></div>
</main>
</div>
<div>
@ -50,7 +51,7 @@
<span>
&copy; RoscoeDaWah 2021-{{ date('Y') }}<br>
v{{ config('app.version') }}, <a href="https://git.frzn.dev/RoscoeDaWah/wah.moe/releases/latest">Source</a><br>
Served by {{ gethostname() }}
<a href="https://webring.julimiro.eu/api/previous/wah.moe">&lt;</a> <a href="https://webring.julimiro.eu/">the basename ring</a> <a href="https://webring.julimiro.eu/api/next/wah.moe">&gt;</a>
</span>
</div>
<div>
@ -60,7 +61,7 @@
<a href="https://x86.isafox.gay/"><img src="{{ URL::asset('images/buttons/x86.gif') }}" alt="x86Overflow"></a>
<a href="https://thinliquid.dev/"><img src="{{ URL::asset('images/buttons/thnlqd.png') }}" alt="thinliquid"></a>
<a href="https://dimden.dev/"><img src="https://dimden.dev/services/images/88x31.gif" alt="Dimden's website"></a><br>
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS"><img src="{{ URL::asset('images/buttons/csshard.gif') }}" alt="CSS is hard"></a>
<img src="{{ URL::asset('images/buttons/servfail.png') }}" alt="Servfail DNS">
<a href="https://linux.org/"><img src="{{ URL::asset('images/buttons/linuxnow.gif') }}" alt="Linux NOW!"></a>
<img src="{{ URL::asset('images/buttons/paws-aliased.png') }}" alt="Made with my own two paws">
<img src="{{ URL::asset('images/buttons/transrights.gif') }}" alt="Trans Rights NOW!">

View file

@ -1,9 +1,12 @@
<nav>
<strong>Pages:</strong>
<a href="/">home</a> |
@if(!isLegacy())
<a href="//wiki.wah.moe">wah-ki</a> |
@endif
<a href="//git.wah.moe">git</a> |
<a href="/pub">files</a> |
<a href="gopher://wah.moe">gopher</a> |
<a href="/bookmarks">bookmarks</a> |
<a href="/guestbook">guestbook</a> |
<a href="/music">music</a> |

View file

@ -1,3 +1,4 @@
@if(!isLegacy())
<div class="wah">
<h3>Random Wah!</h3>
@if ($wah !== "")
@ -8,3 +9,4 @@
<p>Unable to retrieve image</p>
@endif
</div>
@endif

View file

@ -5,7 +5,7 @@
<td>
<form method="POST" action="/guestbook">
@csrf
<x-honeypot/>
@if(!isLegacy())<x-honeypot/>@endif
<table class="form" role="presentation">
<tr>
<td>
@ -32,7 +32,16 @@
<tr>
<td></td>
<td>
@if(isLegacy())
<input type="submit" name="Submit" VALUE="Submit">
@else
<button type="submit">Submit</button>
@endif
</td>
</tr>
<tr>
<td></td>
<td>
</td>
</tr>
</table>
@ -44,12 +53,50 @@
<li>You can submit an entry <u>once every hour</u>.</li>
<li>Your IP address is logged but <u>not</u> publicly displayed.</li>
<li>Any entries that appear to be spam <u>will</u> be removed.</li>
@if (isLegacy())
<li>This form is broken in super-old browsers.</li>
<li>Entries submitted on this site are flagged for manual review.</li>
@endif
</ul>
</td>
</tr>
</table>
@if (isLegacy())
<font size="+2"><b>Entries ({{ count($entries) }} total)</b></font>
<table cellspacing="10" cellpadding="0" border="0">
@foreach ($entries as $entry)
@php
$user_agent = $parser->parse($entry->agent);
@endphp
<tr>
<td>
<table cellspacing="2" cellpadding="5" border="1" width="100%">
<tr><td>
Submitted by <b>{{ $entry->name }}</b>
on <b>{{ $entry->created_at->format('Y-m-d') }}</b>
at <b>{{ $entry->created_at->format('h:i:s A (e)') }}</b>
</td></tr>
<tr><td>{{ $entry->message }}</td></tr>
<tr><td>
@if($entry->agent === "Agent Unavailable")
<i>Agent unavailable</i>
@else
@if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
<i>Posted using <b>{{ $entry->agent }}</b></i>
@else
<i>Posted using <b>{{ $user_agent->ua->toString() }}</b>
on <b>{{ $user_agent->os->toString() }}</b></i>
@endif
@endif
</td></tr>
</table>
</td>
</tr>
@endforeach
</table>
@else
<hr>
<h2>Entries <small>({{ count($entries) }} total)</small></h2>
@foreach ($entries as $entry)
@ -65,11 +112,16 @@
<hr>
@if($entry->agent === "Agent Unavailable")
<address>Agent unavailable</address>
@else
@if ($user_agent->ua->toString() == "Other" || $user_agent->os->toString() == "Other")
<address>Posted using <strong>{{ $entry->agent }}</strong></address>
@else
<address>Posted using <strong>{{ $user_agent->ua->toString() }}</strong>
on <strong>{{ $user_agent->os->toString() }}</strong></address>
@endif
@endif
</div>
<br>
@endforeach
@endif
</x-layout>

View file

@ -5,25 +5,29 @@
<p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide
<strong>W</strong>eb.
</p>
@if(!isLegacy())
<br>
@endif
<p>Some quick facts about me:</p>
<ul>
<li>{{ $age }} y/o, he/him, British</li>
<li>Theatre Technician and &quot;Web Developer&quot;</li>
<li>Loves ETC desks, prefers Generics to LEDs for some reason</li>
<li>Spends way too much time on his computer</li>
<li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/">OneShot</a>,
<li>Favorite games: <a href="https://steamcommunity.com/id/RoscoeDaWah/recommended/420530/"><font color="#000000">OneShot</font></a>,
Minecraft, Stardew Valley, N++ and Starbound</li>
<li><a href="http://wxqa.com/">CWOP</a> member</li>
<li><a href="http://wxqa.com/"><font color="#000000">CWOP</font></a> member</li>
</ul>
@if(!isLegacy())
<br>
@endif
<p>Interests:</p>
<ul>
<li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc.</li>
<li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a
href="https://github.com/RoscoeDaWah">GitHub</a>)</li>
<li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/">Flickr</a></li>
<li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/">Steam Profile</a>
href="https://github.com/RoscoeDaWah"><font color="#000000">GitHub</font></a>)</li>
<li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/roscoedawah/"><font color="#000000">Flickr</font></a></li>
<li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/RoscoeDaWah/"><font color="#000000">Steam Profile</font></a>
</li>
</ul>
</x-layout>

View file

@ -2,6 +2,15 @@
<x-slot:title>Absolute Pandamonium!</x-slot:title>
<x-slot:cardImage>{{ asset('/images/embeds/pandamonium.png') }}</x-slot:cardImage>
<x-slot:cardDescription>Follow the adventures of Rosco, Leko, Viz and AJ!</x-slot:cardDescription>
@if (isLegacy())
<p><i>Click images for full-size version (56k no!)</i></p>
@foreach($images as $image)
<a href="{{ str_replace('-legacy', '', $image["path"]) }}"><img src="{{ $image["path"] }}" @if(isset($image["description"])) alt="{{ $image["description"] }}" @endif></a>
@if(isset($image["description"]))
<p>{{$image["description"]}}</p>
@endif
@endforeach
@else
<div class="rosco-leko-gallery">
@foreach($images as $image)
<div>
@ -12,4 +21,5 @@
</div>
@endforeach
</div>
@endif
</x-layout>

View file

@ -26,3 +26,19 @@
Route::post('/guestbook', [GuestbookController::class, 'addEntry'])
->middleware('validator')
->middleware('rate_limit');
Route::get('/proxy/wah/{image}', function (string $image) {
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.tinyfox.dev/hourly/wahs/'.$image);
return response($response->getBody())
->header('Content-Type', $response->getHeader('Content-Type'));
});
Route::get('/proxy/lastfm/{image}', function (string $image) {
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://lastfm.freetls.fastly.net/i/u/174s/'.$image);
return response($response->getBody())
->header('Content-Type', $response->getHeader('Content-Type'));
});