Compare commits
No commits in common. "rewrite/nextjs" and "master" have entirely different histories.
rewrite/ne
...
master
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"extends": "next/core-web-vitals"
|
||||
}
|
184
.gitignore
vendored
|
@ -1,36 +1,164 @@
|
|||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,node
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,node
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
.yarn/install-state.gz
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# debug
|
||||
### Node ###
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# typescript
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
### Node Patch ###
|
||||
# Serverless Webpack directories
|
||||
.webpack/
|
||||
|
||||
# Optional stylelint cache
|
||||
|
||||
# SvelteKit build / generate output
|
||||
.svelte-kit
|
||||
|
||||
### VisualStudioCode ###
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
### VisualStudioCode Patch ###
|
||||
# Ignore all local history of files
|
||||
.history
|
||||
.ionide
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,node
|
||||
ssg/_site
|
|
@ -1,7 +1,7 @@
|
|||
FROM node:22-alpine
|
||||
WORKDIR /app
|
||||
COPY package.json /app
|
||||
COPY ssg/package.json /app/
|
||||
# COPY ssg/package-lock.json /app/
|
||||
RUN npm install
|
||||
COPY . /app
|
||||
COPY ssg/ /app/
|
||||
CMD ["npm", "start"]
|
||||
|
||||
|
|
428
LICENSE
|
@ -1,428 +0,0 @@
|
|||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {output: "export", basePath: process.env.NEXT_PUBLIC_BASE_PATH || "", images: {unoptimized: true}};
|
||||
|
||||
export default nextConfig;
|
6
package-lock.json
generated
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"name": "nexy7574.co.uk-b",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {}
|
||||
}
|
23
package.json
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"name": "nexy7574.co.uk-b",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/js": "^7.4.47",
|
||||
"@mdi/react": "^1.6.1",
|
||||
"next": "14.2.7",
|
||||
"react": "^18",
|
||||
"react-dom": "^18",
|
||||
"sharp": "^0.33.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8",
|
||||
"eslint-config-next": "14.2.7"
|
||||
}
|
||||
}
|
3112
pnpm-lock.yaml
Before Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 574 B |
|
@ -1,62 +0,0 @@
|
|||
import Link from "next/link";
|
||||
import styles from "./page.module.css";
|
||||
|
||||
export default function FaqPage() {
|
||||
return (
|
||||
<div>
|
||||
<h1>Frequently Asked Questions</h1>
|
||||
<hr/>
|
||||
<div className={styles.question}>
|
||||
<h2>Q: What are your keys???</h2>
|
||||
<div>
|
||||
<h3>A: PGP:</h3>
|
||||
<p>
|
||||
<code className="inline">0FA334385D0B689F</code> - available via WKD (<code className="inline">gpg --locate-keys gpg@nexy7574.co.uk</code>), or the full (armoured) key is available
|
||||
<Link href="/assets/pgp-2024-05-13.txt" passHref legacyBehavior><a download>here</a></Link>.
|
||||
The key is also available on several keyservers, however
|
||||
<a href="https://keyserver.ubuntu.com/pks/lookup?search=0FA334385D0B689F&fingerprint=on&op=index" target="_blank" rel="noopener noreferrer">Ubuntu's keyserver</a>
|
||||
is the most reliable and kept up-to-date. Although, WKD should be preferred where possible.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>A: SSH</h3>
|
||||
<p>Can be imported from <Link href="/assets/ssh-2024-05-13.txt" passHref legacyBehavior><a download>download</a></Link>, however be aware I do not sign anything with my SSH key, only my PGP key.</p>
|
||||
<p>Feel free to give me SSH access to your servers though!! I can be trusted with distributed compute power, I promise.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.question}>
|
||||
<h2 id="what-are-your-pc-specs">Q: What are your PC specs/how much did your PC cost?</h2>
|
||||
<p>
|
||||
A: You can find all the details on <Link href="https://uk.pcpartpicker.com/b/Hfz7YJ" rel="noopener" target="_blank">PcPartPicker</Link>.
|
||||
It cost me around £650 to build in December, 2023.
|
||||
</p>
|
||||
</div>
|
||||
<div className={styles.question} id="hack">
|
||||
<h2>Q: Can you hack my friend's instagram?</h2>
|
||||
<p>A: <strong><em>No.</em></strong></p>
|
||||
<h2>Q: Can you fix my printer?</h2>
|
||||
<div>
|
||||
A: Yep!
|
||||
<ol>
|
||||
<li>Kick the printer.</li>
|
||||
<li>Kick it harder.</li>
|
||||
<li>Unplug it (bare with me)</li>
|
||||
<li>Bring your printer to the nearest window</li>
|
||||
<li>Open the window</li>
|
||||
<li>Throw the printer out the window</li>
|
||||
<li>Ask someone else to print it for you (its their problem then)</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.question}>
|
||||
<h2 id="what-music-do-you-listen-to">Q: What music do you listen to?</h2>
|
||||
<p>A: Here's my main playlists. TL;DR, I listen to a lot of pop and rock, with a sprinkle of electronic</p>
|
||||
<p>My favourite artists aren't really a thing, I prefer music over artists and albums, but I consistently listen to K.Flay, Grandson, Mother Mother, Super Whatevr, Cavetown, The Front Bottoms, Hospital Bracelet, and Crawlers.</p>
|
||||
<iframe src="https://open.spotify.com/embed/playlist/26wJTA2mXk3QNXhqBI95kM?utm_source=generator&theme=0" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="encrypted-media" loading="lazy"></iframe>
|
||||
<iframe src="https://open.spotify.com/embed/playlist/07GvdPCtDvWO2UFawBDlSA?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="encrypted-media" loading="lazy"></iframe>
|
||||
<iframe src="https://open.spotify.com/embed/playlist/1mTh1hj7rmzCYknLWfru4C?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="encrypted-media" loading="lazy"></iframe>
|
||||
<p>I am one of those people that will listen to any music genre, and I actually mean it. Just remember though "will listen" doesn't mean "will like".</p>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
.question {
|
||||
margin: .5em;
|
||||
padding: .5em;
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: 12px;
|
||||
color: var(--text-normal);
|
||||
font-weight: bold;
|
||||
}
|
Before Width: | Height: | Size: 25 KiB |
|
@ -1,183 +0,0 @@
|
|||
:root {
|
||||
--background-primary: #000;
|
||||
--background-secondary: #333;
|
||||
--background-tertiary: #555;
|
||||
--background-code: #272C34;
|
||||
--text-normal: #fff;
|
||||
--text-muted: #aaa;
|
||||
--text-link: #59CBF7;
|
||||
--text-link-visited: #F5A9B7;
|
||||
--font-monospace: 'Jetbrains Mono', 'Ubuntu Mono', 'Noto Sans Mono ', "Source Code Pro", "Hack", Consolas, "Lucida Console", monospace;
|
||||
--font-emoji: 'Noto Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Android Emoji', 'EmojiSymbols', 'EmojiOne Color', 'EmojiOne', 'Apple Color Emoji', 'Twemoji Mozilla', 'Twemoji', 'Segoe UI Symbol', sans-serif;
|
||||
--font-normal: "Open Sans", "Helvetica Neue", Arial, sans-serif;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media screen and (prefers-color-scheme: light) {
|
||||
:root {
|
||||
--background-primary: #fff;
|
||||
--background-secondary: #ccc;
|
||||
--background-tertiary: #AAA;
|
||||
--background-code: #d8d3cb;
|
||||
--text-normal: #000;
|
||||
--text-muted: #555;
|
||||
--text-link: #2698c4;
|
||||
--text-link-visited: #c27684;
|
||||
}
|
||||
}
|
||||
|
||||
html,body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
text-align: center;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
body {
|
||||
max-width: 80%;
|
||||
height: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: var(--font-monospace);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
code.inline {
|
||||
background-color: var(--background-code);
|
||||
color: var(--text-normal);
|
||||
font-size: initial;
|
||||
line-height: 1.2;
|
||||
border-radius: 3px;
|
||||
padding: 0.4em 0.6em;
|
||||
}
|
||||
|
||||
.emoji {
|
||||
font-family: var(--font-emoji);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--text-link)
|
||||
}
|
||||
a:hover, a:visited {
|
||||
color: var(--text-link-visited)
|
||||
}
|
||||
a.icon {
|
||||
text-decoration: none;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.icon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
.mainBody {
|
||||
max-width: 1200px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
header {
|
||||
color: var(--text-normal);
|
||||
padding: 0;
|
||||
margin: 1em 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background-color: var(--background-secondary);
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
table th, table td {
|
||||
padding: 0.5em;
|
||||
border: 1px solid var(--text-muted);
|
||||
}
|
||||
|
||||
table th {
|
||||
background-color: var(--background-primary);
|
||||
}
|
||||
|
||||
table tr:nth-child(odd) {
|
||||
background-color: var(--background-tertiary);
|
||||
}
|
||||
|
||||
table tr:nth-child(even) {
|
||||
background-color: var(--background-secondary);
|
||||
}
|
||||
|
||||
table tr:hover {
|
||||
background-color: var(--background-tertiary);
|
||||
}
|
||||
|
||||
/* MAKE SURE THIS IS LOADED *AFTER* MAIN STYLESHEETS! ORDER MATTERS! */
|
||||
@media screen and (max-width: 800px) {
|
||||
body {
|
||||
max-width: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
font-size: initial;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
nav {
|
||||
flex-direction: column;
|
||||
padding: 0;
|
||||
gap: 2em;
|
||||
padding: 1em 0;
|
||||
}
|
||||
.navbar span {
|
||||
display: none
|
||||
}
|
||||
ul.navbar li {
|
||||
margin: 0.3em 0;
|
||||
}
|
||||
#array {
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
}
|
||||
header {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
/*
|
||||
This file should be imported at the end of <body> so that any fonts that're needed are loaded last.
|
||||
|
||||
Sure this will make fonts look ugly on slow connections, but if you can't load the page because the font is taking too long to load, well that's even worse.
|
||||
*/
|
||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap');
|
||||
|
||||
/* Nicked from tailwind
|
||||
|
||||
For some reason, importing the tailwind library broke this CSS (probably my poor naming)
|
||||
so I've had to resort to stealing (copying and pasting from their docs)
|
||||
*/
|
||||
.text-sm {
|
||||
font-size: 0.875rem; /* 14px */
|
||||
line-height: 1.25rem; /* 20px */
|
||||
}
|
||||
|
||||
.icon-48 {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
.icon-64 {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
import "./normalize.css";
|
||||
import "./globals.css";
|
||||
import Footer from "@/components/siteFooter";
|
||||
import Nav from "@/components/siteNav";
|
||||
|
||||
export const metadata = {
|
||||
title: "nexy7574",
|
||||
};
|
||||
|
||||
export default function RootLayout({ children }) {
|
||||
return (
|
||||
<html lang="en">
|
||||
<body>
|
||||
<Nav/>
|
||||
<main>{children}</main>
|
||||
<Footer/>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
export default function MatrixClientsPage() {
|
||||
return (
|
||||
<div>
|
||||
<h1>Matrix Clients</h1>
|
||||
<p>I host a variety of Matrix clients for use, see below.</p>
|
||||
<p>Please keep in mind that they may not always be up to date. If you find one that is out of date, please contact me.</p>
|
||||
<hr/>
|
||||
<h2>Available Web Clients (static):</h2>
|
||||
<div>
|
||||
<Link href="https://element.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/element-color.svg" alt="Element" title="Element" width={128} height={128} className="icon"/>
|
||||
</Link>
|
||||
<Link href="https://schildi.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/schildi-chat.svg" alt="SchildiChat" title="SchildiChat" height={128} width={128} className="icon"/>
|
||||
</Link>
|
||||
<Link href="https://extera.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/extera.svg" alt="Extera" title="Extera" width={128} height={128} className="icon"/>
|
||||
</Link>
|
||||
<Link href="https://cinny.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/cinny.svg" alt="Cinny" title="Cinny" width={128} height={128} className="icon"/>
|
||||
</Link>
|
||||
<Link href="https://commet.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/commet.svg" alt="Commet" title="Commet" width={128} height={128} className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
<hr/>
|
||||
<h2>Synapse Admin:</h2>
|
||||
<p>
|
||||
I also serve a copy of Awesome-Technologies/synapse-admin here. Please note that you will most likely need to use the
|
||||
<code>http://</code> version of the URL, otherwise you will get mixed-content errors. Furthermore, if you do not use
|
||||
your server's IP address, you will need to make sure either <code>*</code> or <code>http://admin.matrix.nexy7574.co.uk</code>
|
||||
is added to your CORS <code>access-control-allow-origin</code> header, otherwise you will ALSO get a CORS error.
|
||||
</p>
|
||||
<div>
|
||||
<Link href="https://admin.matrix.nexy7574.co.uk" target="_blank" className="icon">
|
||||
<Image src="/img/matrix-color.svg" alt="Synapse Admin" title="Synapse Admin" width={128} height={128} className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
<hr/>
|
||||
<h2>Homeserver (nexy7574.co.uk) status:</h2>
|
||||
<Link href="https://status.nexy7574.co.uk" target="_blank">See: status.nexy7574.co.uk (Category T2)</Link>
|
||||
</div>
|
||||
)
|
||||
}
|
350
src/app/normalize.css
vendored
|
@ -1,350 +0,0 @@
|
|||
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/* Document
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Correct the line height in all browsers.
|
||||
* 2. Prevent adjustments of font size after orientation changes in iOS.
|
||||
*/
|
||||
|
||||
html {
|
||||
line-height: 1.15; /* 1 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/* Sections
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the margin in all browsers.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the `main` element consistently in IE.
|
||||
*/
|
||||
|
||||
main {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the font size and margin on `h1` elements within `section` and
|
||||
* `article` contexts in Chrome, Firefox, and Safari.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background on active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Chrome 57-
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||
* all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the border on images inside links in IE 10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change the font styles in all browsers.
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 1 */
|
||||
line-height: 1.15; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
[type="button"],
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner border and padding in Firefox.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the focus styles unset by the previous rule.
|
||||
*/
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the padding in Firefox.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
padding: 0.35em 0.75em 0.625em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the text wrapping in Edge and IE.
|
||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||
* 3. Remove the padding so developers are not caught out when they zero out
|
||||
* `fieldset` elements in all browsers.
|
||||
*/
|
||||
|
||||
legend {
|
||||
box-sizing: border-box; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE 10+.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in IE 10.
|
||||
* 2. Remove the padding in IE 10.
|
||||
*/
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||
*/
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the odd appearance in Chrome and Safari.
|
||||
* 2. Correct the outline style in Safari.
|
||||
*/
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
outline-offset: -2px; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner padding in Chrome and Safari on macOS.
|
||||
*/
|
||||
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||
* 2. Change font properties to `inherit` in Safari.
|
||||
*/
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
}
|
||||
|
||||
/* Interactive
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
* Add the correct display in Edge, IE 10+, and Firefox.
|
||||
*/
|
||||
|
||||
details {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the correct display in all browsers.
|
||||
*/
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* Misc
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10+.
|
||||
*/
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
|
310
src/app/page.jsx
|
@ -1,310 +0,0 @@
|
|||
import Image from "next/image";
|
||||
import styles from './page.module.css';
|
||||
|
||||
// Image imports
|
||||
import pythonColor from "../../public/img/python-color.svg";
|
||||
import javascriptColor from "../../public/img/javascript-color.svg";
|
||||
import gnubashColor from "../../public/img/gnubash-color.svg";
|
||||
import fedoraColor from "../../public/img/fedora-color.svg";
|
||||
import ubuntuColor from "../../public/img/ubuntu-color.svg";
|
||||
import windowsColor from "../../public/img/windows-color.svg";
|
||||
import appleColor from "../../public/img/apple-color.svg";
|
||||
import matrixColor from "../../public/img/matrix-color.svg";
|
||||
import signalColor from "../../public/img/signal-color.svg";
|
||||
import imessageColor from "../../public/img/imessage-color.svg";
|
||||
import discordColor from "../../public/img/discord-color.svg";
|
||||
import gmailColor from "../../public/img/gmail-color.svg";
|
||||
import csharpColor from "../../public/img/csharp-color.svg";
|
||||
import goColor from "../../public/img/go-color.svg";
|
||||
import dockerColor from "../../public/img/docker-color.svg";
|
||||
import gitColor from "../../public/img/git-color.svg";
|
||||
import github from "../../public/img/github.svg";
|
||||
import linode from "../../public/img/linode.svg";
|
||||
import postgresqlColor from "../../public/img/postgresql-color.svg";
|
||||
import ollama from "../../public/img/ollama.svg";
|
||||
import openaiColor from "../../public/img/openai-color.svg";
|
||||
import nextdotjs from "../../public/img/nextdotjs.svg";
|
||||
import fastapiColor from "../../public/img/fastapi-color.svg";
|
||||
import discordpy from "../../public/img/discordpy.png";
|
||||
import pycord from "../../public/img/pycord.png";
|
||||
import forgejoColor from "../../public/img/forgejo-color.svg";
|
||||
import topdotgg from "../../public/img/topdotgg.svg";
|
||||
|
||||
// 88x31s
|
||||
import nikolan from "../../public/88x31/nikolan.webp";
|
||||
import paddyk45 from "../../public/88x31/paddyk45.webp";
|
||||
import restartb from "../../public/88x31/restartb.webp";
|
||||
import tom1212 from "../../public/88x31/tom1212.webp";
|
||||
const _88x31s = {
|
||||
"nikolan": nikolan,
|
||||
"paddyk45": paddyk45,
|
||||
"restartb": restartb,
|
||||
"tom1212": tom1212
|
||||
};
|
||||
import FediPosts from "@/components/fediPosts";
|
||||
|
||||
function CustomIcon({src, name}) {
|
||||
return <Image src={src} alt={name} title={name} width={32} height={32} className="icon icon-48"/>
|
||||
}
|
||||
|
||||
|
||||
export default function Index() {
|
||||
const basePath = process.env.NEXT_PUBLIC_BASE_PATH || "";
|
||||
return (
|
||||
<main>
|
||||
<h1>Hello There!</h1>
|
||||
<p><span>18</span> | she/it | "full"-stack</p>
|
||||
|
||||
|
||||
<h2>Quick - about me</h2>
|
||||
<div>
|
||||
<p>You can hover over icons to get a tooltip, and some you can click to go places.</p>
|
||||
<div className={styles.array}>
|
||||
<div>
|
||||
<h3>Languages</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<CustomIcon src={pythonColor} alt="Python" title="Python" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={javascriptColor} alt="JavaScript" title="JavaScript" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={gnubashColor} alt="Bash" title="Bash" width={32} height={32} className="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Operating Systems</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<CustomIcon src={fedoraColor} alt="Fedora" title="Fedora" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={ubuntuColor} alt="Ubuntu" title="Ubuntu (Server)" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={windowsColor} alt="Windows" title="Windows" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={appleColor} alt="iOS" title="iOS" width={32} height={32} className="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>
|
||||
Communication Platforms
|
||||
</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<a href="https://matrix.to/#/@nex:nexy7574.co.uk" rel="noopener noreferrer" target="_blank" className="icon">
|
||||
<CustomIcon src={matrixColor} alt="Matrix" title="Matrix" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
<a href="https://signal.me/#eu/j24vT8zDzquI0us48k7eiNJcpJjEw4TYUz1gtvo_0HtEfq4C2MZG1YFs5POF98Sb" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={signalColor} alt="Signal" title="Signal" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
<a style={{cursor: "default"}} href="#" className="icon">
|
||||
<CustomIcon src={imessageColor} alt="iMessage" title="iMessage" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
<a href="https://discord.gg/TveBeG7" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={discordColor} alt="Discord" title="Discord" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
<a rel="noopener" target="_blank" className="icon" href="img/email.png">
|
||||
<CustomIcon src={gmailColor} alt="Email" title="Email (very slow)" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Learning</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<CustomIcon src={csharpColor} alt="C#" title="C#" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={goColor} alt="Go" title="Go" width={32} height={32} className="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Tools</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<CustomIcon src={dockerColor} alt="Docker" title="Docker" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={gitColor} alt="Git" title="Git" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={linode} alt="Linode" title="Linode (cloud hosting)" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={postgresqlColor} alt="Postgres" title="Postgres" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={ollama} alt="Ollama" title="Ollama (web hosting)" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={openaiColor} alt="OpenAI/ChatGPT" title="OpenAI/ChatGPT" width={32} height={32} className="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Frameworks & Libraries</h3>
|
||||
<div className={styles.imageSpaced}>
|
||||
<CustomIcon src={nextdotjs} alt="Next.js" title="Next.js" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={fastapiColor} alt="FastAPI" title="FastAPI" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={discordpy} alt="Discord.py" title="Discord.py" width={32} height={32} className="icon"/>
|
||||
<CustomIcon src={pycord} alt="py-cord" title="py-cord" width={32} height={32} className="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h3>Notable Projects</h3>
|
||||
<div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Brief</th>
|
||||
<th>Source</th>
|
||||
<th>Live</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Nio-Bot</td>
|
||||
<td>A bot framework for the matrix ecosystem</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/nio-bot" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://matrix.to/#/#bots:nexy7574.co.uk" rel="opopener" target="_blank" className="icon">
|
||||
<CustomIcon src={matrixColor} alt="Matrix" title="Matrix" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dendritecli</td>
|
||||
<td>A command line interface for interacting with the Dendrite homeserver.</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/dendritecli" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ModMan</td>
|
||||
<td>A CLI mod manager for minecraft servers.</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/modman" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>College Bot v2</td>
|
||||
<td>Specialised chat bot in discord for my college server.</td>
|
||||
<td>
|
||||
<a href="https://git.i-am.nexus/nex/college-bot-v2" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={forgejoColor} alt="Forgejo" title="Forgejo" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
[<a href="https://github.com/nexy7574/college-bot-v2" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>]
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>drop-in-url-previews</td>
|
||||
<td>A drop-in proxy URL preview server for Matrix</td>
|
||||
<td>
|
||||
<a href="https://git.i-am.nexus/nex/drop-in-url-previews" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={forgejoColor} alt="Forgejo" title="Forgejo" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://matrix.nexy7574.co.uk/_matrix/media/r0/preview_url?url=nexy7574.co.uk" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={matrixColor} alt="Matrix" title="Matrix" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spanner</td>
|
||||
<td>A really informational discord bot</td>
|
||||
<td style={{display: "inline-flex", gap: ".45rem"}}>
|
||||
<a href="https://github.com/nexy7574/spanner-v3" rel="noopener" target="_blank" className="icon">
|
||||
v3
|
||||
</a><br/>
|
||||
<a href="https://github.com/nexy7574/spanner-v2" rel="noopener" target="_blank" className="icon">
|
||||
v2
|
||||
</a><br/>
|
||||
<a href="https://github.com/nexy7574/spanner-bot" rel="noopener" target="_blank" className="icon">
|
||||
v1
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://discord.com/api/oauth2/authorize?client_id=722000000000000000&permissions=8&scope=bot" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={discordColor} alt="Discord" title="Discord" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>YourApps</td>
|
||||
<td>A discord bot that trailblazed the discord forms market with, at its peak, 2.5k servers, and over 5 million users.</td>
|
||||
<td><i>proprietary</i></td>
|
||||
<td>
|
||||
<a href="https://top.gg/bot/619328560141697036" rel="noopener noreferrer" target="_blank" className="icon">
|
||||
<CustomIcon src={topdotgg} alt="top.gg" title="top.gg" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Top.py</td>
|
||||
<td>
|
||||
An alternative python API wrapper for the
|
||||
<a href="https://top.gg" rel="noopener noreferrer" target="_blank">top.gg</a>
|
||||
API
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/top.py" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h4>Notable Contributions</h4>
|
||||
<p>These are projects I have contributed to, but not necessarily created or had a major role in.</p>
|
||||
<p>Projects listed here had code contributions - other contributions, such as issues or design insights, are not included.</p>
|
||||
<div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Brief</th>
|
||||
<th>Source</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>PyCord</td>
|
||||
<td>"Pycord, a maintained fork of discord.py, is a python wrapper for the Discord API"</td>
|
||||
<td>
|
||||
<a href="https://github.com/Pycord-Development/pycord" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>matrix-nio</td>
|
||||
<td>"A Python Matrix client library, designed according to sans I/O principles"</td>
|
||||
<td>
|
||||
<a href="https://github.com/matrix-nio/matrix-nio" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>discord.py</td>
|
||||
<td>"An API wrapper for Discord written in Python"</td>
|
||||
<td>
|
||||
<a href="https://github.com/Rapptz/discord.py" rel="noopener" target="_blank" className="icon">
|
||||
<CustomIcon src={github} alt="GitHub" title="GitHub" width={32} height={32} className="icon"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<h2>Recent fediverse Posts</h2>
|
||||
<FediPosts/>
|
||||
<br/>
|
||||
<div>
|
||||
{
|
||||
Object.keys(_88x31s).map(
|
||||
(fn) => {
|
||||
return <Image key={fn} src={_88x31s[fn] || basePath + "/88x31s/" + fn} alt={fn} title={fn} width={88} height={31} className="icon"/>
|
||||
}
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</main>
|
||||
)
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
.array {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(256px, 1fr));
|
||||
gap: 1em;
|
||||
}
|
||||
|
||||
.array div, .box {
|
||||
margin: .5em;
|
||||
padding: .5em;
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: 12px;
|
||||
color: var(--text-normal);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.imageSpaced * {
|
||||
padding: 4px;
|
||||
}
|
89
src/assets/pgp-2024-05-13.txt
Normal file
|
@ -0,0 +1,89 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
5UGvAepPBA==
|
||||
=PAYz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
1
src/assets/ssh-2024-05-13.txt
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqk+0tSp1dm8ALhcxRjkurj3y/3rN9SOHquNHVk+xXZIOUTXjWSgXclrlsHH2562VgeBx8ZxJFkX04jMb3wkPHNL794troX4LX17X0j5ixBK76vPGMuzG0/VU6oLwl3S2Zkuz6q3d3oGj6+qemLhQF6qRZ+ByTkhoQu22Jc6QYpk0o6lMF1kabkS496LxBD8JlAGBT4DsdHem3dDUwvAWseNEs3gJHOup9T43Iw3pKpZYrfISBxhkehojtsMNFziL+pX2rYZHxwoMAiaD9LKlhFsZgND2bMYFJ0WODycAwkrhEMwEVoEWNtlYeqadRZpCSA1ta1Rz9souovTkV2Kbov522eHuIVlu1uWNENiM+fEtP36QEMnZago0FgUBpfijh8LNjN/SR5aOeyn2Nw9pjQP3ZSjmFe2lFz88E092HwrAczc6gGb/tCH4DcTBwyna6AQFHFFw1QcW9rer5kjYnFpZGjmXBBnSFg8lDy3AhGdUSJfELS3ESA0pyAWk7Nr0=
|
|
@ -1,45 +0,0 @@
|
|||
.note {
|
||||
background-color: var(--background-secondary);
|
||||
border: 1px solid var(--text-muted);
|
||||
border-radius: 5px;
|
||||
padding: .4em;
|
||||
display: block
|
||||
}
|
||||
|
||||
.container {
|
||||
display: grid;
|
||||
grid-auto-columns: 1fr;
|
||||
grid-auto-rows: 3fr;
|
||||
border-radius: 5px;
|
||||
overflow-y: auto;
|
||||
max-height: 50vh;
|
||||
grid-gap: 1em;
|
||||
}
|
||||
|
||||
.container a {
|
||||
color: var(--text-primary);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.author {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
vertical-align: middle;
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.author img {
|
||||
border-radius: 20%;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.content {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.reactions, .reaction {
|
||||
list-style: none;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
}
|
|
@ -1,113 +0,0 @@
|
|||
"use client";
|
||||
|
||||
import Image from "next/image";
|
||||
import { useEffect, useState } from "react";
|
||||
import styles from "./fediPosts.css"
|
||||
import Link from "next/link";
|
||||
|
||||
|
||||
function FediPost({data}) {
|
||||
if(data.reply) {
|
||||
return null;
|
||||
}
|
||||
console.debug(data.reactionEmojis);
|
||||
return (
|
||||
<Link href={`https://fedi.transgender.ing/notes/${data.id}`}>
|
||||
<div className={"note"}>
|
||||
<div className={"author"}>
|
||||
<div>
|
||||
<Image src={data.user.avatarUrl} alt={data.user.username} height={48} width={48}/>
|
||||
</div>
|
||||
<div>
|
||||
<div>{data.user.username}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={"content"}>{data.text}</div>
|
||||
<div className="reactions" hidden={!data.reactions}>
|
||||
<ul>
|
||||
{
|
||||
Object.keys(data.reactions).map(reaction => {
|
||||
let customEmoji = (data.reactionEmojis || {})[reaction.slice(1, -1)];
|
||||
if(customEmoji) {
|
||||
return (
|
||||
<li key={reaction} className="reaction">
|
||||
<Image src={customEmoji} alt={reaction} height={24} width={24}/>x{data.reactions[reaction]}
|
||||
</li>
|
||||
)
|
||||
}
|
||||
return (
|
||||
<li key={reaction} className="reaction">
|
||||
{reaction}x{data.reactions[reaction]}
|
||||
</li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
export default function FediPosts() {
|
||||
const [notes, setNotes] = useState([]);
|
||||
|
||||
const getNotes = (_notes) => {
|
||||
let payload = {
|
||||
userId: "9w3ylp0gudtr0001",
|
||||
limit: 100,
|
||||
withReplies: false,
|
||||
withRenotes: false,
|
||||
};
|
||||
let lastNote = _notes[_notes.length - 1] || null;
|
||||
if(lastNote) {
|
||||
payload.untilId = lastNote.id;
|
||||
}
|
||||
fetch(
|
||||
"https://fedi.transgender.ing/api/users/notes",
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
headers: {"Content-Type": "application/json"}
|
||||
}
|
||||
)
|
||||
.then(res => res.json()).catch(console.error);
|
||||
}
|
||||
useEffect(
|
||||
() => {
|
||||
let payload = {
|
||||
userId: "9w3ylp0gudtr0001",
|
||||
limit: 100,
|
||||
withReplies: false,
|
||||
withRenotes: false,
|
||||
withFiles: false,
|
||||
};
|
||||
let lastNote = notes[notes.length - 1] || null;
|
||||
if(lastNote) {
|
||||
payload.untilId = lastNote.id;
|
||||
}
|
||||
fetch(
|
||||
"https://fedi.transgender.ing/api/users/notes",
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
headers: {"Content-Type": "application/json"}
|
||||
}
|
||||
)
|
||||
.then(res => res.json())
|
||||
.then((newNotes) => {setNotes([...notes, ...newNotes]);})
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
if(!notes.length) {
|
||||
return <div className="container">Loading notes...</div>
|
||||
}
|
||||
return (
|
||||
<div className={"container"}>
|
||||
<div>{notes.map(note => <FediPost key={note.id} data={note} />)}</div>
|
||||
<button type="button" onClick={() => {getNotes(notes).then((newNotes) => {setNotes([...notes, ...newNotes])});}}>More</button>
|
||||
</div>
|
||||
)
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
import Link from "next/link";
|
||||
import styles from "./siteFooter.module.css";
|
||||
|
||||
export default function Footer() {
|
||||
return (
|
||||
<footer className={styles.footer}>
|
||||
<div>
|
||||
<p>🍉 Free Palestine | 🇺🇦 Slava Ukraini</p>
|
||||
</div>
|
||||
<div>
|
||||
<div><Link href="https://nextjs.org/" target="_blank"></Link></div>
|
||||
<div><Link href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" target="_blank" rel="noopener noreferrer">Source Code</Link></div>
|
||||
<div><Link href="/technologies">I <3 FLOSS</Link></div>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<Link href="https://ring.ssi.fyi/previous?host=nexy7574.co.uk">←</Link>
|
||||
<Link href="https://ring.ssi.fyi/">ssi webring</Link>
|
||||
<Link href="https://ring.ssi.fyi/next?host=nexy7574.co.uk">→</Link>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
)
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
.footer {
|
||||
margin: 1em 0;
|
||||
padding: .1em;
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: 12px;
|
||||
color: var(--text-normal);
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import twemojiTrans from "../../public/img/twemoji_trans.svg";
|
||||
import github from "../../public/img/github.svg";
|
||||
import matrix from "../../public/img/matrix-color.svg";
|
||||
import forgejo from "../../public/img/forgejo-color.svg";
|
||||
import fediverse from "../../public/img/fediverse.svg";
|
||||
import Icon from '@mdi/react';
|
||||
import { mdiFrequentlyAskedQuestions, mdiHomeOutline, mdiMessageOutline } from '@mdi/js';
|
||||
import styles from './siteNav.module.css';
|
||||
|
||||
export default function Nav() {
|
||||
return (
|
||||
<nav className={styles.nav}>
|
||||
<div className={styles.identifier}>
|
||||
<span><Image src={twemojiTrans} wdith={32} height={32} alt="🏳️⚧️" className="icon"/></span> <i id="__name">Nexus</i>
|
||||
</div>
|
||||
<div className={styles.links}>
|
||||
<div><Link href="/"><Icon className="icon" path={mdiHomeOutline} size={1} /></Link></div>
|
||||
<div><Link href="/faq"><Icon className="icon" path={mdiFrequentlyAskedQuestions} size={1} title={"FAQ"} /></Link></div>
|
||||
<div><Link href="/matrix"><Icon className="icon" path={mdiMessageOutline} size={1} title={"Matrix Clients (mirror list)"}/></Link></div>
|
||||
<div>
|
||||
<Link href="https://matrix.to/#/@nex:nexy7574.co.uk" className="icon">
|
||||
<Image src={matrix} wdith={32} height={32} alt="Chat" title="Chat" className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
<div>
|
||||
<Link href="https://github.com/nexy7574" rel="noopener noreferrer" target="_blank" className="icon">
|
||||
<Image src={github} alt="GitHub" title="GitHub" wdith={32} height={32} className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
<div>
|
||||
<Link href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" rel="noopener" target="_blank" className="icon">
|
||||
<Image src={forgejo} alt="Forgejo" title="Forgejo (git) & source code" wdith={32} height={32} className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
<div>
|
||||
<Link href="https://fedi.transgender.ing/@nex" rel="noopener noreferrer" target="_blank" className="icon">
|
||||
<Image src={fediverse} alt="Sharkey (Fediverse)" title="Sharkey (Fediverse)" wdith={32} height={32} className="icon"/>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
)
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
.nav {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
background-color: var(--background-secondary);
|
||||
border-radius: 1em;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: .5em;
|
||||
}
|
||||
|
||||
.identifier {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: baseline;
|
||||
}
|
35
src/faq.css
Normal file
|
@ -0,0 +1,35 @@
|
|||
.question {
|
||||
margin: 1em;
|
||||
padding: 1em;
|
||||
box-shadow: 0 0 1em rgba(255, 255, 255, 0.2);
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.question p {
|
||||
font-size: large
|
||||
}
|
||||
|
||||
code.block {
|
||||
display: block;
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
background-color: #1f1f1f;
|
||||
color: #dcdcdc;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
border-radius: 5px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
code.inline {
|
||||
background-color: #1f1f1f;
|
||||
color: #dcdcdc;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: initial;
|
||||
line-height: 1.2;
|
||||
border-radius: 3px;
|
||||
padding: 0.4em 0.6em;
|
||||
}
|
192
src/faq.html
Normal file
|
@ -0,0 +1,192 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" style="background-color: black;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>FAQ | nexy7574.co.uk</title>
|
||||
<link rel="stylesheet" href="index.css">
|
||||
<link rel="stylesheet" href="faq.css">
|
||||
<link rel="stylesheet" href="responsive.css">
|
||||
<script defer>
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
() => {
|
||||
const __name = document.getElementById("__name");
|
||||
__name.addEventListener(
|
||||
"mouseover",
|
||||
() => {
|
||||
__name.textContent = "she/it";
|
||||
}
|
||||
)
|
||||
__name.addEventListener(
|
||||
"mouseout",
|
||||
() => {
|
||||
__name.textContent = "Nexus";
|
||||
}
|
||||
)
|
||||
const email = document.querySelector("img[src='img/email.png']");
|
||||
const emailImages = document.querySelectorAll("img[src='img/gmail-color.svg']");
|
||||
if(email && emailImages.length > 0) {
|
||||
for (let emailImg of emailImages) {
|
||||
emailImg.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
email.hidden = !email.hidden;
|
||||
}
|
||||
)
|
||||
emailImg.style.cursor = "pointer";
|
||||
}
|
||||
email.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
email.hidden = !email.hidden;
|
||||
}
|
||||
)
|
||||
email.style.cursor = "pointer";
|
||||
}
|
||||
}
|
||||
)
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="mainBody">
|
||||
<header>
|
||||
<nav>
|
||||
<div>
|
||||
<span><img src="img/twemoji_trans.svg" width="32px" height="32px" alt="🏳️⚧️" class="icon"/></span> <i id="__name">Nexus</i>
|
||||
</div>
|
||||
<div class="navbar">
|
||||
<div><a href="index.html">Home</a></div>
|
||||
<div><a href="faq.html">FAQ</a></div>
|
||||
<div><a href="/chat/#/user/@nex:nexy7574.co.uk" class="icon"><img src="img/matrix-color.svg" width="32px" height="32px" alt="Chat" title="Chat" class="icon"/></a></div>
|
||||
<div><a href="/status" class="icon"><img src="img/server.svg" alt="Service Status" title="Service Status" width="32px" height="32px" class="icon"/></a></div>
|
||||
<div>
|
||||
<a href="https://github.com/nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo (git) & source code" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://tech.lgbt/@nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/mastodon-color.svg" alt="Mastodon" title="Mastodon" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
<div>
|
||||
<h1>Frequently Asked Questions</h1>
|
||||
<p>Note: I am dyslexic, so please excuse any spelling or grammar errors. Feel free to message me for corrections ^^</p>
|
||||
<div id="toc" hidden>
|
||||
<h2>Table Of Contents:</div>
|
||||
<ol id="toc-li"></ol>
|
||||
</div> <!-- Table of Contents -->
|
||||
<noscript><p>There will be a table of contents here if you enable JavaScript. You don't have to though.</p></noscript>
|
||||
<hr/>
|
||||
<div class="question">
|
||||
<h2>Q: What are your keys???</h2>
|
||||
<div>
|
||||
<h3>A: PGP:</h3>
|
||||
<p>
|
||||
<code class="inline">0FA334385D0B689F</code> - available via WKD (<code class="inline">gpg --locate-keys me@nexy7574.co.uk</code>), or the full (armoured) key is available <a href="assets/pgp-2024-05-13.txt" download>here</a>.
|
||||
The key is also available on several keyservers, however
|
||||
<a href="https://keyserver.ubuntu.com/pks/lookup?search=0FA334385D0B689F&fingerprint=on&op=index" target="_blank" rel="noopener noreferrer">Ubuntu's keyserver</a>
|
||||
is the most reliable and kept up-to-date. Although, WKD should be preferred where possible.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>A: SSH</h3>
|
||||
<p>Can be imported from <a href="assets/ssh-2024-05-13.txt" download>this text file</a>, however be aware I do not sign anything with my SSH key, only my PGP key.</p>
|
||||
<p>Feel free to give me SSH access to your servers though :^)</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="what-are-your-pc-specs">Q: What are your PC specs/how much did your PC cost?</h2>
|
||||
<p>
|
||||
A: You can find all the details on <a href="https://uk.pcpartpicker.com/b/Hfz7YJ" rel="noopener" target="_blank">PcPartPicker</a>.
|
||||
It cost me around £650 to build in December, 2023.
|
||||
</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="can-you-hack">Q: Can you hack my friend's instagram?</h2>
|
||||
<p>A: <strong><em>No.</em></strong></p>
|
||||
<h2 id="fix-printer">Q: Can you fix my printer?</h2>
|
||||
<p>
|
||||
A: Yep!
|
||||
<ol>
|
||||
<li>Kick the printer.</li>
|
||||
<li>Kick it harder.</li>
|
||||
<li>Unplug it (bare with me)</li>
|
||||
<li>Bring your printer to the nearest window</li>
|
||||
<li>Open the window</li>
|
||||
<li>Throw the printer out the window</li>
|
||||
<li>Ask someone else to print it for you (its their problem then)</li>
|
||||
</ol>
|
||||
</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="what-music-do-you-listen-to">Q: What music do you listen to?</h2>
|
||||
<p>A: Here's my main playlists. TL;DR, I listen to a lot of pop and rock, with a sprinkle of electronic</p>
|
||||
<p>My favourite artists aren't really a thing, I prefer music over artists and albums, but I consistently listen to K.Flay, Grandson, Mother Mother, Super Whatevr, Cavetown, The Front Bottoms, Hospital Bracelet, and Crawlers.</p>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/26wJTA2mXk3QNXhqBI95kM?utm_source=generator&theme=0" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/07GvdPCtDvWO2UFawBDlSA?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/1mTh1hj7rmzCYknLWfru4C?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<p>I am one of those people that will listen to any music genre, and I actually mean it. Just remember though "will listen" doesn't mean "will like".</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="urandom-or-random">Q: Urandom or Random?</h2>
|
||||
<p>A: Urandom</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
() => {
|
||||
const questions = document.querySelectorAll(".question h2");
|
||||
for (let question of questions) {
|
||||
const id = question.id;
|
||||
const a = document.createElement("a");
|
||||
a.href = `#${id}`;
|
||||
a.textContent = "🔗";
|
||||
a.title = "Link to this question";
|
||||
a.style.textDecoration = "none";
|
||||
a.style.fontSize = "smaller";
|
||||
a.style.color = "black";
|
||||
a.style.marginLeft = "0.5em";
|
||||
question.appendChild(a);
|
||||
// copy URL to clipboard
|
||||
a.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
navigator.clipboard.writeText(location.href + "#" + id);
|
||||
a.textContent = "✅";
|
||||
setTimeout(() => {
|
||||
a.textContent = "🔗";
|
||||
}, 1000);
|
||||
}
|
||||
)
|
||||
// add to table of contents
|
||||
const toc = document.getElementById("toc");
|
||||
toc.hidden = false;
|
||||
const tocLi = document.getElementById("toc-li");
|
||||
const li = document.createElement("li");
|
||||
const a2 = document.createElement("a");
|
||||
a2.href = `#${id}`;
|
||||
a2.textContent = question.textContent.replace(/^Q: /, "").replace("🔗", "");
|
||||
li.appendChild(a2);
|
||||
tocLi.appendChild(li);
|
||||
}
|
||||
}
|
||||
)
|
||||
</script>
|
||||
</main>
|
||||
<link rel="stylesheet" href="lazy-fonts.css">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 875 B After Width: | Height: | Size: 875 B |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 284 B |
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 911 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 717 B |
Before Width: | Height: | Size: 838 B After Width: | Height: | Size: 838 B |
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 473 B After Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 989 B After Width: | Height: | Size: 989 B |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 416 B After Width: | Height: | Size: 416 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 955 B After Width: | Height: | Size: 955 B |
Before Width: | Height: | Size: 322 B After Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 626 B After Width: | Height: | Size: 626 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 283 B |
Before Width: | Height: | Size: 409 B After Width: | Height: | Size: 409 B |
Before Width: | Height: | Size: 376 B After Width: | Height: | Size: 376 B |
Before Width: | Height: | Size: 963 B After Width: | Height: | Size: 963 B |
Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 583 B |
Before Width: | Height: | Size: 218 B After Width: | Height: | Size: 218 B |
118
src/index.css
Normal file
|
@ -0,0 +1,118 @@
|
|||
.emoji {
|
||||
font-family: 'Noto Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Android Emoji',
|
||||
'EmojiSymbols', 'EmojiOne Color', 'EmojiOne', 'Apple Color Emoji', 'Twemoji Mozilla', 'Twemoji', 'Segoe UI Symbol', sans-serif;
|
||||
/* just try them all 🤷 */
|
||||
}
|
||||
|
||||
a {
|
||||
color: #59CBF7
|
||||
}
|
||||
a:hover, a:visited {
|
||||
color: #F5A9B7
|
||||
}
|
||||
|
||||
a.icon {
|
||||
text-decoration: none;
|
||||
}
|
||||
img.icon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
html,body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.mainBody {
|
||||
max-width: 1200px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
header {
|
||||
color: #fff;
|
||||
padding: 0;
|
||||
margin: 1em 0;
|
||||
text-align: center;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
background-color: #111;
|
||||
border-radius: 12px;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(6, 1fr);
|
||||
align-items: center;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background-color: #111;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
table th,
|
||||
table td {
|
||||
padding: 0.5em;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
|
||||
table th {
|
||||
background-color: #222;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table tr:nth-child(even) {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
table tr:hover {
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
#array {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
grid-gap: 1em;
|
||||
}
|
||||
|
||||
#array div, .box {
|
||||
margin: 0 0.5em;
|
||||
padding: 0.5em;
|
||||
background-color: #333;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin: 1em 0;
|
||||
padding: 1em;
|
||||
background-color: #111;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
border-top: 1px solid #444
|
||||
}
|
327
src/index.html
Normal file
|
@ -0,0 +1,327 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" style="background-color: black;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>About Me | nexy7574.co.uk</title>
|
||||
<link rel="stylesheet" href="index.css">
|
||||
<link rel="stylesheet" href="responsive.css">
|
||||
<script defer>
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
() => {
|
||||
const __name = document.getElementById("__name");
|
||||
__name.addEventListener(
|
||||
"mouseover",
|
||||
() => {
|
||||
__name.textContent = "she/it";
|
||||
}
|
||||
)
|
||||
__name.addEventListener(
|
||||
"mouseout",
|
||||
() => {
|
||||
__name.textContent = "Nexus";
|
||||
}
|
||||
)
|
||||
const email = document.getElementById("email-modal");
|
||||
const emailImages = document.querySelectorAll("img[src='img/gmail-color.svg']");
|
||||
if(email && emailImages.length > 0) {
|
||||
for (let emailImg of emailImages) {
|
||||
emailImg.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
email.hidden = !email.hidden;
|
||||
}
|
||||
)
|
||||
emailImg.style.cursor = "pointer";
|
||||
}
|
||||
email.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
email.hidden = !email.hidden;
|
||||
}
|
||||
)
|
||||
email.style.cursor = "pointer";
|
||||
}
|
||||
}
|
||||
)
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="email-modal" style="z-index: 100;width:100%;height: 100%;padding:200px auto;background-color: rgba(0, 0, 0, 0.5);position:absolute" hidden>
|
||||
<p>If you're going to email me, please use PGP encryption. My key is available via WKD, or <a href="faq.html">the FAQ</a></p>
|
||||
<img src="img/email.png" width="1366px" height="768px" alt="oh"/>
|
||||
</div>
|
||||
<div class="mainBody">
|
||||
<header>
|
||||
<nav>
|
||||
<div>
|
||||
<span><img src="img/twemoji_trans.svg" width="32px" height="32px" alt="🏳️⚧️" class="icon"/></span> <i id="__name">Nexus</i>
|
||||
</div>
|
||||
<div class="navbar">
|
||||
<div><a href="index.html">Home</a></div>
|
||||
<div><a href="faq.html">FAQ</a></div>
|
||||
<div><a href="/chat/#/user/@nex:nexy7574.co.uk" class="icon"><img src="img/matrix-color.svg" width="32px" height="32px" alt="Chat" title="Chat" class="icon"/></a></div>
|
||||
<div><a href="/status" class="icon"><img src="img/server.svg" alt="Service Status" title="Service Status" width="32px" height="32px" class="icon"/></a></div>
|
||||
<div>
|
||||
<a href="https://github.com/nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo (git) & source code" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://https://tech.lgbt/@nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/mastodon-color.svg" alt="Mastodon" title="Mastodon" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main>
|
||||
<h1>Hello There!</h1>
|
||||
<p><span id="__age">17</span> | she/it | "full"-stack</p>
|
||||
|
||||
<h2>Quick - about me</h2>
|
||||
<div>
|
||||
<p>You can hover over icons to get a tooltip, and some you can click to go places.</p>
|
||||
<div id="array">
|
||||
<div>
|
||||
<h3>Languages</h3>
|
||||
<div>
|
||||
<img src="img/python-color.svg" alt="Python" title="Python" width="32px" height="32px" class="icon">
|
||||
<img src="img/javascript-color.svg" alt="JavaScript" title="JavaScript" width="32px" height="32px" class="icon">
|
||||
<img src="img/gnubash-color.svg" alt="Bash" title="Bash" width="32px" height="32px" class="icon">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Operating Systems</h3>
|
||||
<div>
|
||||
<img src="img/fedora-color.svg" alt="Fedora" title="Fedora" width="32px" height="32px" class="icon">
|
||||
<img src="img/ubuntu-color.svg" alt="Ubuntu" title="Ubuntu (Server)" width="32px" height="32px" class="icon">
|
||||
<img src="img/windows-color.svg" alt="Windows" title="Windows" width="32px" height="32px" class="icon">
|
||||
<img src="img/apple-color.svg" alt="iOS" title="iOS" width="32px" height="32px" class="icon">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Communication Platforms</h3>
|
||||
<p style="font-size: initial">In order of fastest to slowest</p>
|
||||
<div>
|
||||
<a href="https://matrix.to/#/@nex:nexy7574.co.uk" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
<a href="https://signal.me/#eu/j24vT8zDzquI0us48k7eiNJcpJjEw4TYUz1gtvo_0HtEfq4C2MZG1YFs5POF98Sb" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/signal-color.svg" alt="Signal" title="Signal" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
<img src="img/imessage-color.svg" alt="iMessage" title="iMessage" width="32px" height="32px" class="icon">
|
||||
<a href="https://discord.gg/TveBeG7" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
<a rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/gmail-color.svg" alt="Email" title="Email (very slow)" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Learning</h3>
|
||||
<div>
|
||||
<img src="img/csharp-color.svg" alt="C#" title="C#" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/go-color.svg" alt="Go" title="Go" width="32px" height="32px" class="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Tools</h3>
|
||||
<div>
|
||||
<img src="img/docker-color.svg" alt="Docker" title="Docker" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/git-color.svg" alt="Git" title="Git" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/linode.svg" alt="Linode" title="Linode (cloud hosting)" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/postgresql-color.svg" alt="Postgres" title="Postgres" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/ollama.svg" alt="Ollama" title="Ollama (web hosting)" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/openai-color.svg" alt="OpenAI/ChatGPT" title="OpenAI/ChatGPT" width="32px" height="32px" class="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Frameworks & Libraries</h3>
|
||||
<div>
|
||||
<img src="img/nextdotjs.svg" alt="Next.js" title="Next.js" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/fastapi-color.svg" alt="FastAPI" title="FastAPI" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/discordpy.png" alt="Discord.py" title="Discord.py" width="32px" height="32px" class="icon"/>
|
||||
<img src="img/pycord.png" alt="py-cord" title="py-cord" width="32px" height="32px" class="icon"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h3>Notable Projects</h3>
|
||||
<div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Brief</th>
|
||||
<th>Source</th>
|
||||
<th>Live</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Nio-Bot</td>
|
||||
<td>A bot framework for the matrix ecosystem</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/nio-bot" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://matrix.to/#/#bots:nexy7574.co.uk" rel="opopener" target="_blank" class="icon">
|
||||
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dendritecli</td>
|
||||
<td>A command line interface for interacting with the Dendrite homeserver.</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/dendritecli" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ModMan</td>
|
||||
<td>A CLI mod manager for minecraft servers.</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/modman" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>College Bot v2</td>
|
||||
<td>Specialised chat bot in discord for my college server.</td>
|
||||
<td>
|
||||
<a href="https://git.i-am.nexus/nex/college-bot-v2" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
[<a href="https://github.com/nexy7574/college-bot-v2" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>]
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>drop-in-url-previews</td>
|
||||
<td>A drop-in proxy URL preview server for Matrix</td>
|
||||
<td>
|
||||
<a href="https://git.i-am.nexus/nex/drop-in-url-previews" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/forgejo-color.svg" alt="Forgejo" title="Forgejo" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://matrix.nexy7574.co.uk/_matrix/media/r0/preview_url?url=nexy7574.co.uk" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/matrix-color.svg" alt="Matrix" title="Matrix" width="32px" height="32px" class="icon">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spanner</td>
|
||||
<td>A really informational discord bot</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/spanner-v3" rel="noopener" target="_blank" class="icon">
|
||||
v3
|
||||
</a><br/>
|
||||
<a href="https://github.com/nexy7574/spanner-v2" rel="noopener" target="_blank" class="icon">
|
||||
v2
|
||||
</a><br/>
|
||||
<a href="https://github.com/nexy7574/spanner-bot" rel="noopener" target="_blank" class="icon">
|
||||
v1
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://discord.com/api/oauth2/authorize?client_id=722000000000000000&permissions=8&scope=bot" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/discord-color.svg" alt="Discord" title="Discord" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>YourApps</td>
|
||||
<td>A discord bot that trailblazed the discord forms market with, at its peak, 2.5k servers, and over 5 million users.</td>
|
||||
<td><i>proprietary</i></td>
|
||||
<td>
|
||||
<a href="https://top.gg/bot/619328560141697036" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="img/topdotgg.svg" alt="top.gg" title="top.gg" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Top.py</td>
|
||||
<td>
|
||||
An alternative python API wrapper for the
|
||||
<a href="https://top.gg" rel="noopener noreferrer" target="_blank">top.gg</a>
|
||||
API
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://github.com/nexy7574/top.py" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h4>Notable Contributions</h4>
|
||||
<p>These are projects I have contributed to, but not necessarily created or had a major role in.</p>
|
||||
<p>Projects listed here had code contributions - other contributions, such as issues or design insights, are not included.</p>
|
||||
<div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Brief</th>
|
||||
<th>Source</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>PyCord</td>
|
||||
<td>"Pycord, a maintained fork of discord.py, is a python wrapper for the Discord API"</td>
|
||||
<td>
|
||||
<a href="https://github.com/Pycord-Development/pycord" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>matrix-nio</td>
|
||||
<td>"A Python Matrix client library, designed according to sans I/O principles"</td>
|
||||
<td>
|
||||
<a href="https://github.com/matrix-nio/matrix-nio" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>discord.py</td>
|
||||
<td>"An API wrapper for Discord written in Python"</td>
|
||||
<td>
|
||||
<a href="https://github.com/Rapptz/discord.py" rel="noopener" target="_blank" class="icon">
|
||||
<img src="img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
<p>🍉 Free Palestine | 🇺🇦 Slava Ukraini | 🔥 Tories out</p>
|
||||
</footer>
|
||||
<link rel="stylesheet" href="lazy-fonts.css">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
6
src/lazy-fonts.css
Normal file
|
@ -0,0 +1,6 @@
|
|||
/*
|
||||
This file should be imported at the end of <body> so that any fonts that're needed are loaded last.
|
||||
|
||||
Sure this will make fonts look ugly on slow connections, but if you can't load the page because the font is taking too long to load, well that's even worse.
|
||||
*/
|
||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap');
|
48
src/responsive.css
Normal file
|
@ -0,0 +1,48 @@
|
|||
/* MAKE SURE THIS IS LOADED *AFTER* MAIN STYLESHEETS! ORDER MATTERS! */
|
||||
@media screen and (max-width: 1600px) {
|
||||
body {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1400px) {
|
||||
body {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
body {
|
||||
max-width: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
font-size: initial;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
nav {
|
||||
flex-direction: column;
|
||||
padding: 0;
|
||||
gap: 2em;
|
||||
padding: 1em 0;
|
||||
}
|
||||
.navbar span {
|
||||
display: none
|
||||
}
|
||||
ul.navbar li {
|
||||
margin: 0.3em 0;
|
||||
}
|
||||
#array {
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
}
|
||||
header {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
31
ssg/.eleventy.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
// const { eleventyImageTransformPlugin } = require("@11ty/eleventy-img");
|
||||
const markdownIt = require("markdown-it");
|
||||
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.setLiquidOptions({
|
||||
jsTruthy: true,
|
||||
});
|
||||
// eleventyConfig.addPassthroughCopy("img");
|
||||
// eleventyConfig.addPassthroughCopy("assets");
|
||||
// eleventyConfig.addPassthroughCopy("js");
|
||||
eleventyConfig.addPassthroughCopy("src/css");
|
||||
eleventyConfig.addPassthroughCopy("src/img");
|
||||
eleventyConfig.addPassthroughCopy("src/assets");
|
||||
let options = {
|
||||
html: true,
|
||||
breaks: true,
|
||||
linkify: true,
|
||||
};
|
||||
|
||||
eleventyConfig.setLibrary("md", markdownIt(options));
|
||||
return {
|
||||
dir: {
|
||||
input: "src",
|
||||
// data: "_assets",
|
||||
// includes: "_includes",
|
||||
// layouts: "_layouts"
|
||||
}
|
||||
};
|
||||
//
|
||||
};
|
36
ssg/README.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
# SSG Edition
|
||||
|
||||
The original site was migrated to use 11ty in order to take advantage of features like templating.
|
||||
|
||||
Now `/ssg/_site` should be deployed.
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
cd ssg
|
||||
npm i
|
||||
npm run build
|
||||
```
|
||||
|
||||
## Serving
|
||||
|
||||
Write this Caddyfile:
|
||||
|
||||
```caddy
|
||||
site.example {
|
||||
root * ./_site
|
||||
encode {
|
||||
zstd
|
||||
gzip 9
|
||||
}
|
||||
file_server
|
||||
}
|
||||
```
|
||||
|
||||
Then deploy:
|
||||
|
||||
```bash
|
||||
caddy run
|
||||
```
|
||||
|
||||
Then go to http://site.example (well, whatever you changed it to)
|
2962
ssg/package-lock.json
generated
Normal file
17
ssg/package.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"name": "ssg",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "eleventy --serve",
|
||||
"build": "eleventy"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@11ty/eleventy": "^2.0.1",
|
||||
"@11ty/eleventy-img": "^4.0.2"
|
||||
}
|
||||
}
|
2091
ssg/pnpm-lock.yaml
Normal file
15
ssg/src/_includes/footer.njk
Normal file
|
@ -0,0 +1,15 @@
|
|||
<footer>
|
||||
<p>🍉 Free Palestine | 🇺🇦 Slava Ukraini</p>
|
||||
<p class="text-sm">
|
||||
Built with <a href="https://www.11ty.dev/" target="_blank" rel="noopener noreferrer"><strong>11ty</strong></a>
|
||||
|
|
||||
<a href="https://git.i-am.nexus/nex/nexy7574.co.uk-b/src/branch/master/ssg" target="_blank" rel="noopener noreferrer">Source Code</a>
|
||||
|
|
||||
<a href="/technologies">I <3 FLOSS</a>
|
||||
</p>
|
||||
<p>
|
||||
<a href="https://ring.ssi.fyi/previous?host=nexy7574.co.uk">←</a>
|
||||
<a href="https://ring.ssi.fyi/">ssi webring</a>
|
||||
<a href="https://ring.ssi.fyi/next?host=nexy7574.co.uk">→</a>
|
||||
</p>
|
||||
</footer>
|
22
ssg/src/_includes/layouts/base.njk
Normal file
|
@ -0,0 +1,22 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en" style="background-color: black;">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ title | safe }} | nexy7574.co.uk</title>
|
||||
<link rel="stylesheet" href="{{ '/css/bundle.css' | url }}">
|
||||
<meta property="og:title" content="{{ title | safe }} | nexy7574">
|
||||
<meta property="og:description" content="{{description | safe}}">
|
||||
<meta property="theme-color" content="#000000">
|
||||
<meta property="og:type" content="website">
|
||||
</head>
|
||||
<body>
|
||||
<div class="mainBody">
|
||||
{% include 'nav.njk' %}
|
||||
<main>
|
||||
{{ content | safe }}
|
||||
</main>
|
||||
{% include 'footer.njk' %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
28
ssg/src/_includes/nav.njk
Normal file
|
@ -0,0 +1,28 @@
|
|||
<header>
|
||||
<nav>
|
||||
<div>
|
||||
<span><img src="/img/twemoji_trans.svg" width="32px" height="32px" alt="🏳️⚧️" class="icon"/></span> <i id="__name">Nexus</i>
|
||||
</div>
|
||||
<div class="navbar">
|
||||
<div><a href="/">Home</a></div>
|
||||
<div><a href="/faq">FAQ</a></div>
|
||||
<div><a href="/matrix">[M] Clients</a></div>
|
||||
<div><a href="/chat/#/user/@nex:nexy7574.co.uk" class="icon"><img src="/img/matrix-color.svg" width="32px" height="32px" alt="Chat" title="Chat" class="icon"/></a></div>
|
||||
<div>
|
||||
<a href="https://github.com/nexy7574" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="/img/github.svg" alt="GitHub" title="GitHub" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://git.i-am.nexus/nex/nexy7574.co.uk-b" rel="noopener" target="_blank" class="icon">
|
||||
<img src="/img/forgejo-color.svg" alt="Forgejo" title="Forgejo (git) & source code" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://fedi.transgender.ing/@nex" rel="noopener noreferrer" target="_blank" class="icon">
|
||||
<img src="/img/fediverse.svg" alt="Sharkey (Fedi)" title="Sharkey (Fedi)" width="32px" height="32px" class="icon">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
89
ssg/src/assets/pgp-2024-05-13.txt
Normal file
|
@ -0,0 +1,89 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
5UGvAepPBA==
|
||||
=PAYz
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
1
ssg/src/assets/ssh-2024-05-13.txt
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqk+0tSp1dm8ALhcxRjkurj3y/3rN9SOHquNHVk+xXZIOUTXjWSgXclrlsHH2562VgeBx8ZxJFkX04jMb3wkPHNL794troX4LX17X0j5ixBK76vPGMuzG0/VU6oLwl3S2Zkuz6q3d3oGj6+qemLhQF6qRZ+ByTkhoQu22Jc6QYpk0o6lMF1kabkS496LxBD8JlAGBT4DsdHem3dDUwvAWseNEs3gJHOup9T43Iw3pKpZYrfISBxhkehojtsMNFziL+pX2rYZHxwoMAiaD9LKlhFsZgND2bMYFJ0WODycAwkrhEMwEVoEWNtlYeqadRZpCSA1ta1Rz9souovTkV2Kbov522eHuIVlu1uWNENiM+fEtP36QEMnZago0FgUBpfijh8LNjN/SR5aOeyn2Nw9pjQP3ZSjmFe2lFz88E092HwrAczc6gGb/tCH4DcTBwyna6AQFHFFw1QcW9rer5kjYnFpZGjmXBBnSFg8lDy3AhGdUSJfELS3ESA0pyAWk7Nr0=
|
222
ssg/src/css/bundle.css
Normal file
|
@ -0,0 +1,222 @@
|
|||
.question {
|
||||
margin: 1em;
|
||||
padding: 1em;
|
||||
box-shadow: 0 0 1em rgba(255, 255, 255, 0.2);
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.question p {
|
||||
font-size: large
|
||||
}
|
||||
|
||||
code.block {
|
||||
display: block;
|
||||
padding: 1em;
|
||||
margin: 1em 0;
|
||||
background-color: #1f1f1f;
|
||||
color: #dcdcdc;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
border-radius: 5px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
code.inline {
|
||||
background-color: #1f1f1f;
|
||||
color: #dcdcdc;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
font-size: initial;
|
||||
line-height: 1.2;
|
||||
border-radius: 3px;
|
||||
padding: 0.4em 0.6em;
|
||||
}
|
||||
|
||||
.emoji {
|
||||
font-family: 'Noto Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Android Emoji',
|
||||
'EmojiSymbols', 'EmojiOne Color', 'EmojiOne', 'Apple Color Emoji', 'Twemoji Mozilla', 'Twemoji', 'Segoe UI Symbol', sans-serif;
|
||||
/* just try them all 🤷 */
|
||||
}
|
||||
|
||||
a {
|
||||
color: #59CBF7
|
||||
}
|
||||
a:hover, a:visited {
|
||||
color: #F5A9B7
|
||||
}
|
||||
|
||||
a.icon {
|
||||
text-decoration: none;
|
||||
font-size: 2em;
|
||||
}
|
||||
img.icon {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
html,body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.mainBody {
|
||||
max-width: 1200px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
header {
|
||||
color: #fff;
|
||||
padding: 0;
|
||||
margin: 1em 0;
|
||||
text-align: center;
|
||||
}
|
||||
nav {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
background-color: #111;
|
||||
border-radius: 12px;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: grid;
|
||||
grid-template-columns: repeat(7, 1fr);
|
||||
align-items: center;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
background-color: #111;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
table th,
|
||||
table td {
|
||||
padding: 0.5em;
|
||||
border: 1px solid #444;
|
||||
}
|
||||
|
||||
table th {
|
||||
background-color: #222;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
table tr:nth-child(even) {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
table tr:hover {
|
||||
background-color: #555;
|
||||
}
|
||||
|
||||
#array {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
grid-gap: 1em;
|
||||
}
|
||||
|
||||
#array div, .box {
|
||||
margin: 0 0.5em;
|
||||
padding: 0.5em;
|
||||
background-color: #333;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
footer {
|
||||
margin: 1em 0;
|
||||
padding: 1em;
|
||||
background-color: #111;
|
||||
border-radius: 12px;
|
||||
color: #fff;
|
||||
border-top: 1px solid #444
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* MAKE SURE THIS IS LOADED *AFTER* MAIN STYLESHEETS! ORDER MATTERS! */
|
||||
@media screen and (max-width: 1600px) {
|
||||
body {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1400px) {
|
||||
body {
|
||||
max-width: 80%;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
body {
|
||||
max-width: 100%;
|
||||
min-width: 100%;
|
||||
width: 100%;
|
||||
font-size: initial;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
nav {
|
||||
flex-direction: column;
|
||||
padding: 0;
|
||||
gap: 2em;
|
||||
padding: 1em 0;
|
||||
}
|
||||
.navbar span {
|
||||
display: none
|
||||
}
|
||||
ul.navbar li {
|
||||
margin: 0.3em 0;
|
||||
}
|
||||
#array {
|
||||
grid-template-columns: repeat(1, 1fr);
|
||||
}
|
||||
header {
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
/*
|
||||
This file should be imported at the end of <body> so that any fonts that're needed are loaded last.
|
||||
|
||||
Sure this will make fonts look ugly on slow connections, but if you can't load the page because the font is taking too long to load, well that's even worse.
|
||||
*/
|
||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Color+Emoji&display=swap');
|
||||
|
||||
/* Nicked from tailwind
|
||||
|
||||
For some reason, importing the tailwind library broke this CSS (probably my poor naming)
|
||||
so I've had to resort to stealing (copying and pasting from their docs)
|
||||
*/
|
||||
.text-sm {
|
||||
font-size: 0.875rem; /* 14px */
|
||||
line-height: 1.25rem; /* 20px */
|
||||
}
|
110
ssg/src/faq.njk
Normal file
|
@ -0,0 +1,110 @@
|
|||
---
|
||||
layout: layouts/base.njk
|
||||
title: Frequently Asked Questions
|
||||
---
|
||||
<div>
|
||||
<h1>Frequently Asked Questions</h1>
|
||||
<p>Note: I am dyslexic, so please excuse any spelling or grammar errors. Feel free to message me for corrections ^^</p>
|
||||
<div id="toc" hidden>
|
||||
<h2>Table Of Contents:</h2>
|
||||
<ol id="toc-li"></ol>
|
||||
</div>
|
||||
<noscript><p>There will be a table of contents here if you enable JavaScript. You don't have to though.</p></noscript>
|
||||
<hr/>
|
||||
<div class="question">
|
||||
<h2>Q: What are your keys???</h2>
|
||||
<div>
|
||||
<h3>A: PGP:</h3>
|
||||
<p>
|
||||
<code class="inline">0FA334385D0B689F</code> - available via WKD (<code class="inline">gpg --locate-keys me@nexy7574.co.uk</code>), or the full (armoured) key is available <a href="assets/pgp-2024-05-13.txt" download>here</a>.
|
||||
The key is also available on several keyservers, however
|
||||
<a href="https://keyserver.ubuntu.com/pks/lookup?search=0FA334385D0B689F&fingerprint=on&op=index" target="_blank" rel="noopener noreferrer">Ubuntu's keyserver</a>
|
||||
is the most reliable and kept up-to-date. Although, WKD should be preferred where possible.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>A: SSH</h3>
|
||||
<p>Can be imported from <a href="{{ '/assets/ssh-2024-05-13.txt' | url }}" download>this text file</a>, however be aware I do not sign anything with my SSH key, only my PGP key.</p>
|
||||
<p>Feel free to give me SSH access to your servers though :^)</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="what-are-your-pc-specs">Q: What are your PC specs/how much did your PC cost?</h2>
|
||||
<p>
|
||||
A: You can find all the details on <a href="https://uk.pcpartpicker.com/b/Hfz7YJ" rel="noopener" target="_blank">PcPartPicker</a>.
|
||||
It cost me around £650 to build in December, 2023.
|
||||
</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="can-you-hack">Q: Can you hack my friend's instagram?</h2>
|
||||
<p>A: <strong><em>No.</em></strong></p>
|
||||
<h2 id="fix-printer">Q: Can you fix my printer?</h2>
|
||||
<p>
|
||||
A: Yep!
|
||||
<ol>
|
||||
<li>Kick the printer.</li>
|
||||
<li>Kick it harder.</li>
|
||||
<li>Unplug it (bare with me)</li>
|
||||
<li>Bring your printer to the nearest window</li>
|
||||
<li>Open the window</li>
|
||||
<li>Throw the printer out the window</li>
|
||||
<li>Ask someone else to print it for you (its their problem then)</li>
|
||||
</ol>
|
||||
</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="what-music-do-you-listen-to">Q: What music do you listen to?</h2>
|
||||
<p>A: Here's my main playlists. TL;DR, I listen to a lot of pop and rock, with a sprinkle of electronic</p>
|
||||
<p>My favourite artists aren't really a thing, I prefer music over artists and albums, but I consistently listen to K.Flay, Grandson, Mother Mother, Super Whatevr, Cavetown, The Front Bottoms, Hospital Bracelet, and Crawlers.</p>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/26wJTA2mXk3QNXhqBI95kM?utm_source=generator&theme=0" width="100%" height="352" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/07GvdPCtDvWO2UFawBDlSA?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<iframe style="border-radius:12px" src="https://open.spotify.com/embed/playlist/1mTh1hj7rmzCYknLWfru4C?utm_source=generator&theme=0" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>
|
||||
<p>I am one of those people that will listen to any music genre, and I actually mean it. Just remember though "will listen" doesn't mean "will like".</p>
|
||||
</div>
|
||||
<div class="question">
|
||||
<h2 id="urandom-or-random">Q: Urandom or Random?</h2>
|
||||
<p>A: Urandom</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
() => {
|
||||
const questions = document.querySelectorAll(".question h2");
|
||||
for (let question of questions) {
|
||||
const id = question.id;
|
||||
const a = document.createElement("a");
|
||||
a.href = `#${id}`;
|
||||
a.textContent = "🔗";
|
||||
a.title = "Link to this question";
|
||||
a.style.textDecoration = "none";
|
||||
a.style.fontSize = "smaller";
|
||||
a.style.color = "black";
|
||||
a.style.marginLeft = "0.5em";
|
||||
question.appendChild(a);
|
||||
// copy URL to clipboard
|
||||
a.addEventListener(
|
||||
"click",
|
||||
() => {
|
||||
navigator.clipboard.writeText(location.href + "#" + id);
|
||||
a.textContent = "✅";
|
||||
setTimeout(() => {
|
||||
a.textContent = "🔗";
|
||||
}, 1000);
|
||||
}
|
||||
)
|
||||
// add to table of contents
|
||||
const toc = document.getElementById("toc");
|
||||
toc.hidden = false;
|
||||
const tocLi = document.getElementById("toc-li");
|
||||
const li = document.createElement("li");
|
||||
const a2 = document.createElement("a");
|
||||
a2.href = `#${id}`;
|
||||
a2.textContent = question.textContent.replace(/^Q: /, "").replace("🔗", "");
|
||||
li.appendChild(a2);
|
||||
tocLi.appendChild(li);
|
||||
}
|
||||
}
|
||||
)
|
||||
</script>
|
1
ssg/src/img/apple-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#FFFFFF" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Apple</title><path d="M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701"/></svg>
|
After Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 871 B After Width: | Height: | Size: 871 B |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
1
ssg/src/img/csharp-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg role="img" fill="#512BD4" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>C#</title><path d="M1.194 7.543v8.913c0 1.103.588 2.122 1.544 2.674l7.718 4.456a3.086 3.086 0 0 0 3.088 0l7.718-4.456a3.087 3.087 0 0 0 1.544-2.674V7.543a3.084 3.084 0 0 0-1.544-2.673L13.544.414a3.086 3.086 0 0 0-3.088 0L2.738 4.87a3.085 3.085 0 0 0-1.544 2.673Zm5.403 2.914v3.087a.77.77 0 0 0 .772.772.773.773 0 0 0 .772-.772.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546 2.314 2.314 0 1 1-4.631 0v-3.087c0-.615.244-1.203.679-1.637a2.312 2.312 0 0 1 3.274 0c.434.434.678 1.023.678 1.637a.769.769 0 0 1-.226.545.767.767 0 0 1-1.091 0 .77.77 0 0 1-.226-.545.77.77 0 0 0-.772-.772.771.771 0 0 0-.772.772Zm12.35 3.087a.77.77 0 0 1-.772.772h-.772v.772a.773.773 0 0 1-1.544 0v-.772h-1.544v.772a.773.773 0 0 1-1.317.546.775.775 0 0 1-.226-.546v-.772H12a.771.771 0 1 1 0-1.544h.772v-1.543H12a.77.77 0 1 1 0-1.544h.772v-.772a.773.773 0 0 1 1.317-.546.775.775 0 0 1 .226.546v.772h1.544v-.772a.773.773 0 0 1 1.544 0v.772h.772a.772.772 0 0 1 0 1.544h-.772v1.543h.772a.776.776 0 0 1 .772.772Zm-3.088-2.315h-1.544v1.543h1.544v-1.543Z"/></svg>
|
After Width: | Height: | Size: 1.1 KiB |
1
ssg/src/img/css3-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#1572B6" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>CSS3</title><path d="M1.5 0h21l-1.91 21.563L11.977 24l-8.565-2.438L1.5 0zm17.09 4.413L5.41 4.41l.213 2.622 10.125.002-.255 2.716h-6.64l.24 2.573h6.182l-.366 3.523-2.91.804-2.956-.81-.188-2.11h-2.61l.29 3.855L12 19.288l5.373-1.53L18.59 4.414z"/></svg>
|
After Width: | Height: | Size: 343 B |
1
ssg/src/img/discord-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#5865F2" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Discord</title><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>
|
After Width: | Height: | Size: 1.4 KiB |
BIN
ssg/src/img/discordpy.png
Normal file
After Width: | Height: | Size: 60 KiB |
1
ssg/src/img/docker-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#2496ED" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Docker</title><path d="M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288Z"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
ssg/src/img/element-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#0DBD8B" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Element</title><path d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0zm-1.314 4.715c3.289 0 5.956 2.66 5.956 5.943 0 .484-.394.877-.879.877s-.879-.393-.879-.877c0-2.313-1.88-4.189-4.198-4.189-.486 0-.879-.393-.879-.877s.392-.877.879-.877zm-5.092 9.504c-.486 0-.879-.394-.879-.877 0-3.283 2.666-5.945 5.956-5.945.485 0 .879.393.879.877s-.394.876-.879.876c-2.319 0-4.198 1.877-4.198 4.191 0 .484-.395.878-.879.878zm7.735 5.067c-3.29 0-5.957-2.662-5.957-5.944 0-.484.394-.878.879-.878s.879.394.879.878c0 2.313 1.88 4.189 4.199 4.189.485 0 .879.393.879.877 0 .486-.394.878-.879.878zm0-2.683c-.485 0-.88-.393-.88-.876 0-.484.395-.878.88-.878 2.318 0 4.199-1.876 4.199-4.19 0-.484.393-.877.879-.877.485 0 .879.393.879.877 0 3.282-2.667 5.944-5.957 5.944z"/></svg>
|
After Width: | Height: | Size: 875 B |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 517 B After Width: | Height: | Size: 517 B |
1
ssg/src/img/fastapi-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#009688" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>FastAPI</title><path d="M12 0C5.375 0 0 5.375 0 12c0 6.627 5.375 12 12 12 6.626 0 12-5.373 12-12 0-6.625-5.373-12-12-12zm-.624 21.62v-7.528H7.19L13.203 2.38v7.528h4.029L11.376 21.62z"/></svg>
|
After Width: | Height: | Size: 284 B |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
1
ssg/src/img/fedora-color.svg
Normal file
|
@ -0,0 +1 @@
|
|||
<svg fill="#51A2DA" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Fedora</title><path d="M12.001 0C5.376 0 .008 5.369.004 11.992H.002v9.287h.002A2.726 2.726 0 0 0 2.73 24h9.275c6.626-.004 11.993-5.372 11.993-11.997C23.998 5.375 18.628 0 12 0zm2.431 4.94c2.015 0 3.917 1.543 3.917 3.671 0 .197.001.395-.03.619a1.002 1.002 0 0 1-1.137.893 1.002 1.002 0 0 1-.842-1.175 2.61 2.61 0 0 0 .013-.337c0-1.207-.987-1.672-1.92-1.672-.934 0-1.775.784-1.777 1.672.016 1.027 0 2.046 0 3.07l1.732-.012c1.352-.028 1.368 2.009.016 1.998l-1.748.013c-.004.826.006.677.002 1.093 0 0 .015 1.01-.016 1.776-.209 2.25-2.124 4.046-4.424 4.046-2.438 0-4.448-1.993-4.448-4.437.073-2.515 2.078-4.492 4.603-4.469l1.409-.01v1.996l-1.409.013h-.007c-1.388.04-2.577.984-2.6 2.47a2.438 2.438 0 0 0 2.452 2.439c1.356 0 2.441-.987 2.441-2.437l-.001-7.557c0-.14.005-.252.02-.407.23-1.848 1.883-3.256 3.754-3.256z"/></svg>
|
After Width: | Height: | Size: 911 B |