Merge MVC rewrite into master (#21)

* Just commit it all

* Require auth

* crap

* Update homepage

* Block AI scrapers

* Update cache update script

* Add dummy file

* Remove unnecessary lastfm config var

* Use withQueryParameters for LastFM API

* Fix embeds

* Update example env

* Smard
This commit is contained in:
Frankie B 2024-06-11 18:02:01 +01:00 committed by GitHub
commit c9299b5410
88 changed files with 1982 additions and 1661 deletions

View file

@ -0,0 +1,28 @@
<x-layout>
<x-slot:title>Admin | Bookmarks</x-slot:title>
@foreach($categories as $category)
<div class="info-section info-admin-section">
<h2>{{ $category->name }}</h2>
<table class="info-admin">
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>URL</th>
<th>Priority</th>
<th class="blank"></th>
</tr>
@foreach($category->sites as $site)
<tr>
<td>{{ $site->id }}</td>
<td>{{ $site->name }}</td>
<td>{{ $site->description }}</td>
<td>{{ $site->url }}</td>
<td>{{ $site->priority }}</td>
<td><a href="?action=delete&id={{ $site->id }}"><button>Delete</button></a></td>
</tr>
@endforeach
</table>
</div>
@endforeach
</x-layout>

View file

@ -0,0 +1,32 @@
<x-layout>
<x-slot:title>Admin | Guestbook</x-slot:title>
<div class="info-section">
<h2>Statistics</h2>
<hr>
<strong>Unique IP addresses:</strong> {{ $guestbook_unique_addr }}<br>
<strong>Entries:</strong> {{ $guestbook_entry_count }}
</div>
<br>
<div class="info-section">
<h2>Entries</h2>
<hr>
<table class="info-admin fullwidth">
<tr>
<th>ID</th>
<th>Name</th>
<th>IP Address</th>
<th>Message</th>
<th class="blank"></th>
</tr>
@foreach ($entries as $entry)
<tr>
<td>{{ $entry->id }}</td>
<td>{{ $entry->name }}</td>
<td>{{ $entry->ip }}</td>
<td>{{ $entry->message }}</td>
<td><a href="?action=delete&id={{ $entry->id }}"><button>Delete</button></a></td>
</tr>
@endforeach
</table>
</div>
</x-layout>

View file

@ -0,0 +1,12 @@
<x-layout>
<x-slot:title>Admin | Import</x-slot:title>
<div class="info-section">
<h2>Imported data</h2>
<hr>
<ul>
@foreach($tables as $name => $data)
<li><strong>{{ ucwords(str_replace('__', ' ', $name)) }}:</strong> {{ $data['count'] }} record(s)</li>
@endforeach
</ul>
</div>
</x-layout>

View file

@ -0,0 +1,18 @@
<x-layout>
<x-slot:title>Admin | Import</x-slot:title>
<form class="import" action="{{ route('admin.import.submit') }}" method="post" enctype="multipart/form-data">
@csrf
<label for="data_file"><strong>File:</strong></label>
<input class="file" type="file" name="data_file" accept=".json"><br>
<h2>What to import:</h2>
<input type="checkbox" name="guestbook__entries" checked>
<label for="guestbook__entries">Guestbook Entries</label><br>
<input type="checkbox" name="guestbook__bans" checked>
<label for="guestbook__bans">Guestbook Bans</label><br>
<input type="checkbox" name="guestbook__entries" checked>
<label for="bookmark__categories">Bookmark Categories</label><br>
<input type="checkbox" name="guestbook__entries" checked>
<label for="bookmark_sites">Bookmark Sites</label><br>
<button type="submit">Import</button>
</form>
</x-layout>

View file

@ -0,0 +1,18 @@
<x-layout>
<x-slot:title>Bookmarks</x-slot:title>
@foreach($categories as $category)
<table class="info-table" role="presentation">
<caption>
<h2>{{ $category->name }}</h2>
<hr>
</caption>
<tbody>
@foreach($category->sites as $site)
<tr>
<td><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</td>
</tr>
@endforeach
</tbody>
</table>
@endforeach
</x-layout>

View file

@ -0,0 +1,4 @@
<div class="info-table current-track">
<h2>Last/Current Track:</h2>
<a href="{{ $track["url"] }}">{{ $track["title"] }} {{ $track["artist"] }}</a><br>
</div>

View file

@ -0,0 +1,113 @@
@php // Get colorscheme from cookie and apply immediately
$colorscheme = request()->cookie('colorscheme', 'catppuccin-macchiato');
@endphp
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Global -->
<meta charset="utf-8">
<meta property="og:type" content="website">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#333333">
<link rel="stylesheet" href="{{ asset("/css/colorschemes/$colorscheme.css") }}" id="css-colorscheme"/>
<link rel="stylesheet" href="{{ asset('/css/master.css') }}"/>
<link rel="icon" type="image/png" href="{{ asset('/favicon-32x32.png') }}" sizes="32x32"/>
<link rel="icon" type="image/png" href="{{ asset('/favicon-16x16.png') }}" sizes="16x16"/>
<script src="{{ asset('/js/schemeSwap.js') }}"></script>
{!! (intval(date('n')) == 12) ? '<script src="/js/christmas/snow.js"></script>' : '' !!}
<!-- Page-specific -->
<title>{{ $title ?? 'Unknown' }} - diskfloppy.me</title>
<meta property="og:title" content="diskfloppy.me | {{ $title }}">
<meta property="og:image" content="/favicon-128x128.png">
</head>
<body onload="setSchemeSelector()">
<div class="page">
<div id="header" class="header">
@if (auth()->check())
<div class="banner red-banner">
<div>
<a href="/admin/guestbook">Guestbook</a>&nbsp;|
<a href="/admin/bookmarks">Bookmarks</a> |
<a href="/admin/import">Import</a>
</div>
<div><strong>Logged in as:</strong> {{ auth()->user()->name }} (<a href="/logout">logout</a>)</div>
</div>
@endif
<x-navbar title="{{ $title }}"/>
<hr>
</div> <!-- header -->
<div id="content" class="content" role="main">
{{ $slot }}
</div> <!-- content -->
<div id="footer" class="footer">
<hr>
<div class="footer" role="contentinfo">
<a href="https://dimden.dev/" class="button">
<img src="https://dimden.dev/services/images/88x31.gif" width="88" height="31"
class="pixel" alt="dimden.dev">
</a>&nbsp;
<a href="https://www.linux.org/" class="button">
<img src="{{ URL::asset('images/buttons/linuxnow.gif') }}" width="88"
class="pixel" height="31" alt="Linux NOW!">
</a>&nbsp;
<a href="https://www.vim.org/" class="button">
<img src="{{ URL::asset('images/buttons/vim.gif') }}" width="88" height="31"
class="pixel" alt="vim">
</a>&nbsp;
<a href="https://wave.webaim.org/" class="button">
<img src="{{ URL::asset('images/buttons/evaluatedWAVE.png') }}" width="88" height="31"
class="pixel" alt="Evaluated to be accessible!">
</a>&nbsp;
<a href="https://jigsaw.w3.org/css-validator/check/referer" class="button">
<img src="{{ URL::asset('images/buttons/vcss-blue.gif') }}" width="88" height="31"
class="pixel" alt="Valid CSS!">
</a>&nbsp;
<a href="https://wiby.me/" class="button">
<img src="{{ URL::asset('images/buttons/wiby.gif') }}" width="88" height="31"
class="pixel" alt="Wiby - Search Engine for the Classic Web">
</a><br>
This site is best viewed at 1024x768 with 16-bit color or better<br>
&copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }} <a
href="https://github.com/floppydisk05/diskfloppy.me">Source</a>,
Served by {{ gethostname() }}<br>
<label for="scheme-selector">Color Scheme:</label>
<select onchange="swapScheme(this.value)" id="scheme-selector">
<optgroup label="Misc">
<option value="c64">C64</option>
</optgroup>
<optgroup label="Light">
<option value="catppuccin-latte">Catppuccin Latte</option>
<option value="gruvbox">Gruvbox</option>
<option value="man-page">Man Page</option>
<option value="papercolor-light">Papercolor Light</option>
<option value="rose-pine-dawn">Rosé Pine Dawn</option>
<option value="solarized-light">Solarized Light</option>
<option value="terminal-basic">Terminal Basic</option>
</optgroup>
<optgroup label="Dark">
<option value="catppuccin-frappe">Catppuccin Frappé</option>
<option value="catppuccin-macchiato" selected="selected">Catppuccin Macchiato</option>
<option value="catppuccin-mocha">Catppuccin Mocha</option>
<option value="gruvbox-dark">Gruvbox Dark</option>
<option value="gruvbox-material">Gruvbox Material</option>
<option value="maia">Maia</option>
<option value="mono-amber">Mono Amber</option>
<option value="mono-cyan">Mono Cyan</option>
<option value="mono-green">Mono Green</option>
<option value="mono-red">Mono Red</option>
<option value="mono-white">Mono White</option>
<option value="mono-yellow">Mono Yellow</option>
<option value="papercolor-dark">Papercolor Dark</option>
<option value="rose-pine">Rosé Pine</option>
<option value="rose-pine-moon">Rose Pine Moon</option>
<option value="shel">Shel</option>
<option value="slate">Slate</option>
<option value="solarized-dark">Solarized Dark</option>
</optgroup>
</select><br>
</div>
</div> <!-- footer -->
</div> <!-- page -->
</body>
</html>

View file

@ -0,0 +1,28 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>{{ $title ?? '' }}</title>
<link rel="stylesheet" href="{{ URL::asset ('css/minimal.css') }}"/>
</head>
<body>
<h1>Error {{ $code }} | <strong>{{ $message }}</strong></h1>
<hr align="left">
<p>Here, have a cat...</p>
<img src="https://http.cat/{{ $code }}" width="500"><br><br>
<p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p>
<br>
<h4>Diagnostic Info</h4>
<table><tr><td>
<code>
Server: &nbsp;{{ gethostname() }}<br>
Your IP: {{ Request::ip() }}<br>
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>
</td></tr></table>
<hr align="left">
<p>&copy; floppydisk 2021-2024</p>
</body>
</html>

View file

@ -0,0 +1,18 @@
<nav>
<h1>diskfloppy.me | <strong>{{ $title }}</strong></h1>
<div class="nav-wrapper">
<div>
<a href="/" title="Home"><img class="pixel" src="/images/icons/nav/home2.png" alt="Home" width="32" height="32"></a>
<a href="//git.diskfloppy.me/" title="cgit"><img class="pixel" src="/images/icons/nav/repo.png" alt="cgit" width="32" height="32"></a>
<a href="/pub/" title="Public Files"><img class="pixel" src="/images/icons/nav/pubfiles.png" alt="Public Files" width="32" height="32"></a>
<a href="/computers/" title="Computers"><img class="pixel" src="/images/icons/nav/computers.png" alt="Computers" width="32" height="32"></a>
<a href="/bookmarks/" title="Bookmarks"><img class="pixel" src="/images/icons/nav/bookmarks.png" alt="Bookmarks" width="32" height="32"></a>
<a href="/guestbook/" title="Guestbook"><img class="pixel" src="/images/icons/nav/guestbook.png" alt="Guestbook" width="32" height="32"></a>
<a href="//weather.diskfloppy.me/" title="Weather"><img class="pixel" src="/images/icons/nav/weather.png" alt="Weather" width="32" height="32"></a>
<a href="/music/" title="Music"><img class="pixel" src="/images/icons/nav/music.png" alt="Music" width="32" height="32"></a>&nbsp;&nbsp;
</div>
<div>
<a href="/login/" title="Admin Login"><img class="pixel" src="/images/icons/nav/admin.png" alt="Admin Login" width="32" height="32"></a>&nbsp;&nbsp;
</div>
</div>
</nav>

View file

@ -0,0 +1,16 @@
<table class="music-top10">
<caption>
<h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2>
</caption>
<tr>
<th><b>#</b></th>
<th><b>Track</b></th>
<th><b>Artist</b></th>
<th><b>Plays</b></th>
</tr>
@php($count = 0)
@foreach ($tracks as $track)
@php($count++)
<x-track :track="$track" :count="$count"/>
@endforeach
</table>

View file

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

View file

@ -0,0 +1,187 @@
@extends('layouts.default')
@section('title', 'Computers')
@section('description', 'Computers I own or have owned.')
@php
// TODO: AMD whitebox, 745, D531, 1525, server, vaio, qosmio, packard bell
@endphp
@section('content')
<table class="computers">
<tr>
<th>PICTURES</th>
<th>SPECS &amp; DESCRIPTION</th>
</tr>
<tr>
<td>Random Whitebox</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>486DX2 (50MHz)</li>
<li>16MB RAM</li>
<li>280MB HDD</li>
<li>Windows NT 3.51</li>
</ul>
<p class="description">
Had been monitoring the ventilation system in a school since the late 1990s,
only stopped because the power supply internally exploded. Replaced the PSU with
a standard ATX PSU and an ATX to AT adaptor and it sprung back to life.
Motherboard is a Gigabyte GA486IM with 4 PCI slots, 4 ISA slots and 2 VLB slots.
Has two identical ISA serial/parallel/game-port cards with one acting as the
HDD/FDD controller. Also has a Realtek NIC with both RJ45 and BNC. GPU is a
Cirrus Logic card and is astoundingly shit.
</p>
</td>
</tr>
<tr>
<td>2023 MacBook Pro 14"</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Apple M3 Pro</li>
<li>18GB RAM</li>
<li>500GB SSD</li>
<li>macOS Sonoma</li>
</ul>
</td>
</tr>
<tr>
<td>2018 MacBook Pro 13"</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel i5-8259U @ 2.3GHz</li>
<li>Intel Iris Plus Graphics 655</li>
<li>8GB RAM</li>
<li>250GB SSD</li>
<li>macOS Sonoma</li>
</ul>
<p class="description">
Old main computer. Really like the touch bar, absolutely hate the butterfly
keyboard.
</p>
</td>
</tr>
<tr>
<td>2012 Lenovo ThinkPad T430</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Core i7</li>
<li>16GB RAM</li>
<li>Windows 7 Professional / NixOS</li>
</ul>
<p class="description">
One of my main computers. Has been modified to use a classic keyboard instead of
the stock Lenovo keyboard.
</p>
</td>
</tr>
<tr>
<td>2005 IBM ThinkPad X41T</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Pentium M @ 1.6GHz</li>
<li>Mobile Intel Express Chipset Family (128MB)</li>
<li>1.5GB RAM</li>
<li>40GB HDD</li>
<li>Windows XP Tablet PC Edition</li>
</ul>
</td>
</tr>
<tr>
<td>1999 Dell OptiPlex GX1</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Pentium II (Deschutes) @ 400MHz</li>
<li>ATI 3D Rage Pro (4MB)</li>
<li>639MB</li>
<li>40GB HDD</li>
<li>MS-DOS 6.22 &amp; WFW 3.10</li>
</ul>
<p class="description">
Cool computer that uses Slot 1 CPUs. After a lot of trial and error I managed to
max out the memory. Has a riser that sports 2 PCI and 2 ISA slots (one PCI and
ISA share the same slot).
</p>
</td>
</tr>
<tr>
<td>2003 IBM ThinkPad T40</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Pentium M @ 1.3GHz</li>
<li>ATI Mobility Radeon 7500 (32MB)</li>
<li>1GB RAM</li>
<li>30GB HDD</li>
<li>Windows 2000 Professional</li>
</ul>
<p class="description">
Useful laptop thanks to its parallel port. Has the ubiquitous GPU solder issues
which I &quot;&quot;&quot;&quot;fixed&quot;&quot;&quot;&quot; by jamming a CF card
between the GPU chip and the keyboard.
</p>
</td>
</tr>
<tr>
<td>2010 HP Compaq Elite 8100</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Core i7</li>
<li>16GB RAM</li>
<li>some SSD and an HDD</li>
<li>Windows Vista Ultimate (64-bit)</li>
</ul>
</td>
</tr>
<tr>
<td>2014 Mac mini</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Core i5-4278U @ 2.6GHz</li>
<li>Intel Iris Graphics</li>
<li>8GB RAM</li>
<li>1TB HDD</li>
<li>VMware ESXi 6.7.0u3</li>
</ul>
<p class="description">
Was used as my VM host for a few years. Has now been superseded by an
actual 1U rack-mount server.
</p>
</td>
</tr>
<tr>
<td>1996 Fujitsu Milan</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Pentium</li>
<li>32MB RAM</li>
<li>1215MB HDD</li>
<li>Windows 98 SE</li>
</ul>
<p class="description">
Was originally a family members' laptop. Unfortunately the HDD side of the
HDD/FDD cable ripped while I was removing the drive to clean the computer.
Still scouring eBay for a replacement cable (or more likely, an entire
parts machine).
</p>
</td>
</tr>
<tr>
<td>1999 Compaq Armada M300</td>
<td>
<span class="section-title">Quick Specs</span>
<ul>
<li>Intel Pentium III</li>
</ul>
<p class="description">
Nice little laptop. Mysteriously dead.
</p>
</td>
</tr>
</table>
@stop

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Unauthorized'))
@section('code', '401')
@section('message', __('Unauthorized'))
<x-minimal-error>
<x-slot:code>401</x-slot:code>
<x-slot:message>Unauthorized</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Payment Required'))
@section('code', '402')
@section('message', __('Payment Required'))
<x-minimal-error>
<x-slot:code>402</x-slot:code>
<x-slot:message>Payment Required</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Forbidden'))
@section('code', '403')
@section('message', __($exception->getMessage() ?: 'Forbidden'))
<x-minimal-error>
<x-slot:code>403</x-slot:code>
<x-slot:message>{{__($exception->getMessage() ?: 'Forbidden')}}</x-slot:message>
</x-minimal-error>

View file

@ -1,27 +1,4 @@
@extends('errors::minimal')
@section('content')
<h1>Error 404 | <strong>Page not found!</strong></h1>
<hr align="left">
<h2>The page <code class="addr">/{{ Request::path() }}/</code> doesn't exist! Did you mean...</h2>
<ul>
<li><a href="//www.diskfloppy.me/">diskfloppy.me</a></li>
<li><a href="//git.diskfloppy.me/">git.diskfloppy.me</a></li>
<li><a href="//weather.diskfloppy.me">weather.diskfloppy.me</a></li>
<li><a href="//dl.diskfloppy.me/">dl.diskfloppy.me</a></li>
<li><a href="https://status.diskfloppy.me">status.diskfloppy.me</a> (HTTPS Only)</li>
<li><a href="gopher://diskfloppy.me">gopher://diskfloppy.me</a></li>
</ul>
<p>Still haven't found what you were looking for or believe this is a server error? Contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a>!</p>
<br>
<h4>Diagnostic Info</h4>
<table><tr><td>
<code>
Server: &nbsp;{{ gethostname() }}<br>
Your IP: {{ Request::ip() }}<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>
</td></tr></table>
<hr align="left">
<p>&copy; floppydisk 2021-2024</p>
@endsection
<x-minimal-error>
<x-slot:code>404</x-slot:code>
<x-slot:message>Page not found!</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('I\'m a teapot'))
@section('code', '418')
@section('message', __('I\'m a teapot'))
<x-minimal-error>
<x-slot:code>418</x-slot:code>
<x-slot:message>I'm a teapot</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Page Expired'))
@section('code', '419')
@section('message', __('Page Expired'))
<x-minimal-error>
<x-slot:code>419</x-slot:code>
<x-slot:message>Page Expired</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Too Many Requests'))
@section('code', '429')
@section('message', __('Too Many Requests'))
<x-minimal-error>
<x-slot:code>429</x-slot:code>
<x-slot:message>Too Many Requests</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Server Error'))
@section('code', '500')
@section('message', __('Server Error'))
<x-minimal-error>
<x-slot:code>500</x-slot:code>
<x-slot:message>Server Error</x-slot:message>
</x-minimal-error>

View file

@ -1,5 +1,4 @@
@extends('errors::minimal')
@section('title', __('Service Unavailable'))
@section('code', '503')
@section('message', __('Service Unavailable'))
<x-minimal-error>
<x-slot:code>503</x-slot:code>
<x-slot:message>Service Unavailable</x-slot:message>
</x-minimal-error>

View file

@ -1,9 +1,8 @@
@extends('layouts.minimal')
@section('title', 'Error 401: Unauthorized User!')
@section('content')
<x-minimal>
<x-slot:title>Error 401: Unauthorized User!</x-slot:title>
<h1>{{ $error }}</h1>
<hr>
@if(isset($description))
<p>{{ $description }}</p>
@endif
@stop
</x-minimal>

View file

@ -1,6 +1,5 @@
@extends('layouts.minimal')
@section('title', 'Error 403: IP Blocked!')
@section('content')
<x-minimal>
<x-slot:title>Error 403: IP Blocked!</x-slot:title>
<h1>Error 403: IP Blocked!</h1>
<hr>
<p>Your IP has been banned from submitting to the guestbook.</p>
@ -9,4 +8,4 @@
@endif
<br>
Click <a href="/guestbook">here</a> to go back to the guestbook.
@stop
</x-minimal>

View file

@ -1,10 +1,9 @@
@extends('layouts.minimal')
@section('title', 'Error 429: Overclocking Detected!')
@section('content')
<x-minimal>
<x-slot:title>Error 429: Overclocking Detected!</x-slot:title>
<h1>Error 429: Overclocking Detected!</h1>
<hr>
<p>Whoa there! Your submissions are going at warp speed.</p>
<p>Remember you can only submit an entry <u>once every hour</u>!</p>
<br>
Click <a href="/guestbook">here</a> to go back to the guestbook.
@stop
</x-minimal>

View file

@ -1,53 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-weight: 100;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.content {
text-align: center;
}
.title {
font-size: 36px;
padding: 20px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
<div class="title">
@yield('message')
</div>
</div>
</div>
</body>
</html>

View file

@ -1,21 +1,3 @@
@extends('layouts.minimal')
@section('content')
<h1>Error @yield('code') | <strong>@yield('message')</strong></h1>
<hr align="left">
<p>Here, have a cat...</p>
<img src="https://http.cat/@yield('code')" width="500"><br><br>
<p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p>
<br>
<h4>Diagnostic Info</h4>
<table><tr><td>
<code>
Server: &nbsp;{{ gethostname() }}<br>
Your IP: {{ Request::ip() }}<br>
Root: &nbsp;&nbsp;&nbsp;{!! url('') !!}<br>
Path: &nbsp;&nbsp;&nbsp;/{{ Request::path() }}/<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>
</td></tr></table>
<hr align="left">
<p>&copy; floppydisk 2021-2024</p>
@endsection
<x-minimal>
</x-minimal>

View file

@ -1,27 +1,12 @@
@extends('layouts.default')
@section('title', 'Guestbook')
@section('content')
@php
use UAParser\Parser;
$parser = Parser::create();
$db_alive = true;
try {
DB::connection()->getPdo();
} catch (Exception $e) {
$db_alive = false;
}
@endphp
@if (!$db_alive)
@include('components.errors.db-error')
@else
<br>
<x-layout>
<x-slot:title>Guestbook</x-slot:title>
<table class="gb-entry-form-container" role="presentation">
<tr>
<td>
<form method="POST" action="/guestbook">
@csrf
<x-honeypot/>
<table class="gb-entry-form" role="presentation">
<table class="form" role="presentation">
<tr>
<td>
<label for="name"><strong>Name:</strong></label>
@ -66,13 +51,6 @@
<hr>
@php
$entries = DB::select('
SELECT name, timestamp, message, agent
FROM guestbook__entries
ORDER BY id DESC
');
@endphp
<h2>Entries <small>({{ count($entries) }} total)</small></h2>
@foreach ($entries as $entry)
@php
@ -82,10 +60,10 @@
<tr>
<td>
Submitted by <strong>{{ $entry->name }}</strong>
on <strong>{{ gmdate('Y-m-d', $entry->timestamp) }}</strong>
at <strong>{{ gmdate('h:i:s A (e)', $entry->timestamp) }}</strong>
on <strong>{{ $entry->created_at->format('Y-m-d') }}</strong>
at <strong>{{ $entry->created_at->format('h:i:s A (e)') }}</strong>
<hr>
{{ $entry->message }}
<span class="guestbook-message">{{ $entry->message }}</span>
<hr>
@if($entry->agent === "Agent Unavailable")
<address>Agent unavailable</address>
@ -98,5 +76,4 @@
</table>
<br>
@endforeach
@endif
@stop
</x-layout>

View file

@ -0,0 +1,45 @@
<x-layout>
<x-slot:title>Home</x-slot:title>
<p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p>
<div class="info-section">
<h2>QuickFacts&trade;</h2>
<hr>
<ul>
<li>18 y/o, he/him, British</li>
<li>Theatre Technician, &quot;Web Developer&quot; and NixOS User</li>
<li>Loves ETC desks, prefers Generics to LEDs for some reason</li>
<li>Has a crippling Soundcraft addiction</li>
<li>Spends way too much time on his computer</li>
<li>Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</li>
<li><a href="http://wxqa.com/">CWOP</a> member</li>
</ul>
</div>
<div class="info-section">
<h2>Interests</h2>
<hr>
<ul>
<li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</li>
<li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</li>
<li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></li>
<li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></li>
</ul>
</div>
<div class="info-section">
<h2>Things they never said</h2>
<hr>
<p>
<script type="text/javascript" src="{{ asset("/js/neverSaid.js") }}"></script>
<noscript>Oops! You need JavaScript enabled to view this content.</noscript>
</p>
</div>
<div class="info-section">
<h2>Contact &amp; social</h2>
<hr>
<p>
<strong>E-mail:</strong> <a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a><br>
<strong>Mastodon:</strong> <a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a><br>
<strong>Matrix:</strong> <a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a>
</p>
</div>
</x-layout>

View file

@ -1,12 +0,0 @@
<nav>
<div>
<a href="/">public home</a> |
<a href="/admin">admin home</a> |
<a href="/admin/guestbook">guestbook</a>
@if (auth()->check())
| ({{ auth()->user()->name }}) <a href="/logout">logout</a>
@else
| <a href="/login">login</a>
@endif
</div>
</nav>

View file

@ -25,7 +25,7 @@ class="pixel" alt="Valid CSS!">
class="pixel" alt="Wiby - Search Engine for the Classic Web">
</a><br>
This site is best viewed at 1024x768 with 16-bit color or better<br>
&copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}, <a
&copy; floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}@if(env('DEVEL'))-dev, @else, @endif<a
href="https://github.com/floppydisk05/diskfloppy.me">Source</a>,
Served by {{ gethostname() }}<br>
<label for="scheme-selector">Color Scheme:</label>

View file

@ -0,0 +1,6 @@
<x-layout>
<x-slot:title>Music</x-slot:title>
<x-current-track :track="$current_track"/>
<hr>
<x-top-tracks :tracks="$top_tracks"/>
</x-layout>

View file

@ -1,33 +0,0 @@
@extends('layouts.minimal')
@section('title', 'Delete confirm')
@section('content')
<h1>Delete Confirmation</h1>
<hr>
<p>Are you sure you want to delete this entry?</p>
<h3>Entry Details:</h3>
<table class="gb-entry-details">
<tr>
<td><b>ID:</b></td>
<td>{{ $entry->id }}</td>
</tr>
<tr>
<td><b>Name:</b></td>
<td>{{ $entry->name }}</td>
</tr>
<tr>
<td><b>Date:</b></td>
<td>{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}</td>
</tr>
<tr>
<td><b>Message:</b></td>
<td>{{ $entry->message }}</td>
</tr>
</table>
<form action="/admin/guestbook/delete" method="POST">
@csrf
<input type="hidden" name="id" value="{{ $entry->id }}">
<button type="submit">Confirm Delete</button>
</form>
@stop

View file

@ -1,32 +0,0 @@
@extends('layouts.default-admin')
@section('title', 'Guestbook')
@section('content')
@php
$entries = DB::select('
SELECT id, name, timestamp, message, ip_address
FROM guestbook__entries
ORDER BY id DESC
');
@endphp
<h1>Entries <small>({{ count($entries) }} total)</small></h1>
@foreach ($entries as $entry)
<table class="gb-admin">
<tr>
<td>
Name:&nbsp;{{ $entry->name }}<br>
IP:&nbsp;&nbsp;&nbsp;{{ $entry->ip_address }}<br>
Date:&nbsp;{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}
</td>
<td class="gb-del">
<a href="/admin/guestbook/delete?id={{ $entry->id }}">del</a>
</td>
</tr>
<tr>
<td class="gb-message">
<br>
{{ htmlspecialchars($entry->message) }}
</td>
</tr></table>
@endforeach
@stop

View file

@ -1,9 +0,0 @@
@extends('layouts.default-admin')
@section('title', 'Page Title')
@section('description', 'Page description goes here')
@php
$user = auth()->user();
@endphp
@section('content')
<p>You are logged in as {{ $user->name }} ({{ $user->email }})</p>
@stop

View file

@ -1,52 +0,0 @@
@extends('layouts.default')
@section('title', 'Bookmarks')
@section('description', 'This is the personal homepage of floppydisk.')
@section('content')
@php
$db_alive = true;
try {
DB::connection()->getPdo();
} catch (Exception $e) {
$db_alive = false;
}
@endphp
@if (!$db_alive)
@include('components.errors.db-error')
@else
@php
$categories = DB::select('
SELECT id, name
FROM bookmark__categories
ORDER BY priority ASC
');
@endphp
@foreach ($categories as $category)
<table class="info-table" role="presentation">
<caption>
<h2>{{ $category->name }}</h2>
<hr>
</caption>
@php
$sites = DB::select(
'
SELECT name, url, description
FROM bookmark__sites
WHERE category_id = ? ORDER BY priority ASC
',
[$category->id],
);
@endphp
@foreach ($sites as $site)
<tr>
<td><a href="{{ $site->url }}">{{ $site->name }}</a>
- {{ $site->description }}</td>
</tr>
@endforeach
</table>
<br>
@endforeach
@endif
@stop

View file

@ -1,7 +0,0 @@
@extends('layouts.default')
@section('title', 'Discord Bot')
@section('description', '')
@section('content')
<p>The diskfloppy.me Discord bot blah blah blah blah blah</p>
<p>Maybe I'll finish this page later idk</p>
@stop

View file

@ -1,442 +0,0 @@
@extends('layouts.default')
@section('title', 'Computers')
@section('description', 'Computers I own or have owned.')
@section('content')
<table class="computers">
<tr>
<th>PICTURES</th>
<th>SPECS &amp; DESCRIPTION</th>
</tr>
<tr>
<td>2023 MacBook Pro 14"</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Apple M3 Pro</li>
<li>18GB RAM</li>
<li>500GB SSD</li>
<li>macOS Sonoma</li>
</ul>
<p class="description">WHAT</p>
</td>
</tr>
<tr>
<td>2018 MacBook Pro 13"</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel i5-8259U @ 2.3GHz</li>
<li>Intel Iris Plus Graphics 655</li>
<li>8GB RAM</li>
<li>250GB SSD</li>
<li>macOS Sonoma</li>
</ul>
</td>
</tr>
<tr>
<td>2012 Lenovo ThinkPad T430</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Core i7</li>
<li>16GB RAM</li>
<li>Windows 7 Professional</li>
</ul>
</td>
</tr>
<tr>
<td>2005 IBM ThinkPad X41T</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Pentium M @ 1.6GHz</li>
<li>Mobile Intel Express Chipset Family (128MB)</li>
<li>1.5GB RAM</li>
<li>40GB HDD</li>
<li>Windows XP Tablet PC Edition</li>
</ul>
</td>
</tr>
<tr>
<td>1999 Dell OptiPlex GX1</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Pentium II (Deschutes) @ 400MHz</li>
<li>ATI 3D Rage Pro (4MB)</li>
<li>639MB</li>
<li>40GB HDD</li>
<li>MS-DOS 6.22 &amp; WFW 3.10</li>
</ul>
</td>
</tr>
<tr>
<td>2003 IBM ThinkPad T40</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Pentium M @ 1.3GHz</li>
<li>ATI Mobility Radeon 7500 (32MB)</li>
<li>1GB RAM</li>
<li>30GB HDD</li>
<li>Windows 2000 Professional</li>
</ul>
</td>
</tr>
<tr>
<td>2010 HP Compaq Elite 8100</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Core i7</li>
<li>16GB RAM</li>
<li>some SSD and an HDD</li>
<li>Windows Vista Ultimate (64-bit)</li>
</ul>
</td>
</tr>
<tr>
<td>2014 Mac mini</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Core i5-4278U @ 2.6GHz</li>
<li>Intel Iris Graphics</li>
<li>8GB RAM</li>
<li>1TB HDD</li>
<li>VMware ESXi 6.7.0u3</li>
</ul>
</td>
</tr>
<tr>
<td>1996 Fujitsu Milan</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Pentium</li>
<li>32MB RAM</li>
<li>1215MB HDD</li>
<li>Windows 98 SE</li>
</ul>
</td>
</tr>
<tr>
<td>1999 Compaq Armada M300</td>
<td>
<section-title>Quick Specs</section-title>
<ul>
<li>Intel Pentium III</li>
</ul>
</td>
</tr>
</table>
<!--<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Custom Build</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">NixOS 22.11 / Windows 10 Pro</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel i7-6700K (8-core) @ 4.0GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">NVidia GTX 1060 (3GB)</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">64GB</td>
</tr>
<tr>
<td class="spec-title">DISK0:</td>
<td class="spec">SanDisk SSD Plus (120GB, Win10)</td>
</tr>
<tr>
<td class="spec-title">DISK1:</td>
<td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
</tr>
<tr>
<td class="spec-title">DISK2:</td>
<td class="spec">WDC WD20EZEAZ-00GGJB0 (2TB, Data)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>MacBook Pro (2018)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">macOS 12.5.1</td>
</tr>
<tr>
<td class="spec-title">Display:</td>
<td class="spec">2560x1600 (Retina)</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel i5-8259U (8-core) @ 2.3GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">Intel Iris Plus Graphics 655</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">8GB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">Apple SSD AP0256M (250GB)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Lenovo ThinkPad T430 (2012)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">NixOS 22.11 / Windows 7 Ultimate</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel i7-3520M (4-core) @ 3.6GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">Intel 3rd Gen Core processor Graphics Controllertd>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">16GB</td>
</tr>
<tr>
<td class="spec-title">DISK0:</td>
<td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
</tr>
<tr>
<td class="spec-title">DISK1:</td>
<td class="spec">Crucial CT250MX500SSD1 (250GB, Win7)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>IBM ThinkPad X41 (2005)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">Windows XP Tablet PC Edition (2005, SP3)</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel Pentium M (single-core) @ 1.6GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">Mobile Intel 915GM/GMS 910GML Express Chipset Family (128MB)</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">1.5GB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">Hitachi HTC426040G9AT00 (40GB)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Dell OptiPlex GX1 (400L+, 1999)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">Windows 3.10 for Workgroups (DOS 6.22)</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel Pentium II (Deschutes) @ 400MHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">ATI 3D Rage Pro (4MB)</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">639MB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">Unknown</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>IBM ThinkPad T40 (2003)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">Windows XP Pro</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel Pentium M (single-core) @ 1.3GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">ATI Mobility Radeon 7500 (32MB)</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">1GB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">Fujitsu MHS2030AT (30GB)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>HP Compaq Elite 8100 CMT</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">Windows Vista 64-bit</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel Core i7</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec"></td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">16GB</td>
</tr>
<tr>
<td class="spec-title">DISK0:</td>
<td class="spec">SanDisk SSD Plus (120GB, Win10)</td>
</tr>
<tr>
<td class="spec-title">DISK1:</td>
<td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Mac mini (2014)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">VMware ESXi 6.7.0u3</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel i5-4278U (4-core) @ 2.6GHz</td>
</tr>
<tr>
<td class="spec-title">GPU:</td>
<td class="spec">Intel Iris Graphics</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">8GB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">Apple HDD HTS541 (1TB)</td>
</tr>
</table>
</td>
</tr>
</table>
<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Fujitsu Milan (1996)</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec-title">OS:</td>
<td class="spec">Windows 98 SE</td>
</tr>
<tr>
<td class="spec-title">CPU:</td>
<td class="spec">Intel Pentium</td>
</tr>
<tr>
<td class="spec-title">Memory:</td>
<td class="spec">32MB</td>
</tr>
<tr>
<td class="spec-title">DISK:</td>
<td class="spec">IBM DPRA-21215 (1215MB)</td>
</tr>
</table>
</td>
</tr>
</table>-->
<!--<table class="computer" role="presentation">
<tr>
<td colspan="2"><h2>Compaq Armada M300</h2><hr></td>
</tr>
<tr>
<td>
<table class="computer-specs">
<tr>
<td class="spec">TBD</td>
</tr>
</table>
</td>
</tr>
</table>-->
@stop

View file

@ -1,88 +0,0 @@
@extends('layouts.default')
@section('title', 'Home')
@section('description', 'This is the personal homepage of floppydisk.')
@section('content')
<p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p>
<table class="info-table" role="presentation">
<caption>
<h2>QuickFacts&trade;</h2>
<hr>
</caption>
<tr>
<td>&#9670; 18 y/o, he/him, British</td>
</tr>
<tr>
<td>&#9670; Theatre Technician, &quot;Web Developer&quot; and NixOS User</td>
</tr>
<tr>
<td>&#9670; Loves ETC desks, prefers Generics to LEDs for some reason</td>
</tr>
<tr>
<td>&#9670; Spends way too much time on his computer</td>
</tr>
<tr>
<td>&#9670; Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</td>
</tr>
<tr>
<td>&#9670; <a href="http://wxqa.com/">CWOP</a> member</td>
</tr>
</table>
<br>
<table class="info-table" role="presentation">
<caption>
<h2>Interests</h2>
<hr>
</caption>
<tr>
<td>&#9670; <b>Tech Theatre</b></td>
<td>- Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</td>
</tr>
<tr>
<td>&#9670; <b>Programming</b></td>
<td>- HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</td>
</tr>
<tr>
<td>&#9670; <b>Photography</b></td>
<td>- <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></td>
</tr>
<tr>
<td>&#9670; <b>Gaming</b></td>
<td>- <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></td>
</tr>
</table>
<br>
<table class="info-table never-said" role="presentation">
<caption>
<h2>Things they never said</h2>
<hr>
</caption>
<tr>
<script type="text/javascript" src="/js/neverSaid.js"></script>
<noscript><td>Oops! You need JavaScript enabled to view this content.</td></noscript>
</tr>
</table>
<br>
<table class="info-table" role="presentation">
<caption>
<h2>Contact &amp; social</h2>
<hr>
</caption>
<tr>
<td><strong>E-mail:</strong></td>
<td><a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a></td>
</tr>
<tr>
<td><strong>Mastodon:</strong></td>
<td><a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a></td>
</tr>
<tr>
<td><strong>Matrix:</strong></td>
<td><a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a></td>
</tr>
</table>
@stop

View file

@ -1,66 +0,0 @@
@extends('layouts.default')
@section('title', 'Music')
@section('description', '')
@section('content')
@php
$cfg = app('config')->get('services')['lastfm'];
$api_root = app('config')->get('app')['api_root'];
$api_alive = true;
try {
$data = file_get_contents($api_root.'/lastfm/current');
} catch (Exception $e) {
$api_alive = false;
}
@endphp
@if (!$api_alive)
@include('components.errors.api-error')
@else
@php
$current_track = json_decode(file_get_contents($api_root . '/lastfm/current'));
$top_tracks = json_decode(file_get_contents($api_root . '/lastfm/top'));
$count = 0;
@endphp
<table class="info-table" role="presentation" width="100%">
<tr>
<td colspan="4">
<h2>Last/Current Track:</h2>
</td>
</tr>
<tr>
<td colspan="4">
<a href="{{ $current_track->url }}">{{ $current_track->title }} {{ $current_track->artist }}</a><br>
</td>
</tr>
</table>
<hr>
<table class="music-top10">
<tr>
<td colspan="4">
<h2 style="margin-bottom: 5px">Top {{ $cfg['toptracks'] }} Tracks (Last 7 days)</h2>
</td>
</tr>
<tr>
<td style="text-align: right"><b>#</b></td>
<td><b>Track</b></td>
<td><b>Artist</b></td>
<td><b>Plays</b></td>
</tr>
@foreach ($top_tracks as $track)
@php $count++ @endphp
@if ($count >= $cfg['toptracks']+1)
@break
@endif
<tr>
<td style="text-align: right">{{ $count }}</td>
<td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%"><a href="{{ $track->url }}">{{ $track->title }}</a></td>
<td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%">{{ $track->artist }}</td>
<td>{{ $track->playcount }}</td>
</tr>
@endforeach
</table>
@endif
@stop

View file

@ -1,16 +0,0 @@
<?php $categories = app('config')->get('projects'); ?>
@extends('layouts.default')
@section('title', 'Projects')
@section('description', 'My projects')
@section('content')
@foreach ($categories as $category)
<h2>{{ $category['name']}}</h2>
@foreach ($category['projects'] as $project)
<div>
<a href="{{ $project['url'] }}">{{ $project['name'] }}</a> - {{ $project['description'] }}<br>
<b>Languages:</b> {{ implode(", ", $project['languages']) }}
</div>
<br>
@endforeach
@endforeach
@stop

View file

@ -1,6 +0,0 @@
@extends('layouts.default')
@section('title', 'Page Title')
@section('description', 'Page description goes here')
@section('content')
<p>page content</p>
@stop

View file

@ -1,61 +0,0 @@
@extends('layouts.default')
@section('title', 'Weather')
@section('description', 'Data from my weather station')
@section('content')
@php
$api_root = app('config')->get('app')['api_root'];
function degreesToCompassDirection($degrees) {
$cardinalDirections = [
'N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE',
'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'
];
return $cardinalDirections[round($degrees*16/360)];
}
$api_alive = true;
try {
$data = file_get_contents($api_root.'/weather');
} catch (Exception $e) {
$api_alive = false;
}
@endphp
@if (!$api_alive)
@include('components.errors.api-error')
@else
@php
$data = json_decode(file_get_contents($api_root.'/weather'));
$updated = gmdate('H:i Y-m-d', $data->updated);
$data = $data->current;
@endphp
<table class="info-table" role="presentation">
<caption>
<h2>Local Weather</h2>
<hr>
</caption>
<tr>
<td><b>Wind Speed:</b></td>
<td>{{ $data->wind->speed }} mph</td>
</tr>
<tr>
<td><b>Wind Direction:</b></td>
<td>{{ $data->wind->direction->degrees }}°, {{ $data->wind->direction->cardinal }}</td>
</tr>
<tr>
<td><b>Temperature:</b></td>
<td>{{ $data->temperature }}°C</td>
</tr>
<tr>
<td><b>Rain Rate:</b></td>
<td>{{ $data->rain_rate }} mm/hr</td>
</tr>
<tr>
<td><b>Humidity:</b></td>
<td>{{ $data->humidity }}%</td>
</tr>
</table>
<br>
<small><i>(Last Update: {{ $updated }})</i></small>
@endif
@stop