First Commit
|
|
@ -0,0 +1,24 @@
|
||||||
|
# build output
|
||||||
|
dist/
|
||||||
|
# generated types
|
||||||
|
.astro/
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# jetbrains setting folder
|
||||||
|
.idea/
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Astro Starter Kit: Minimal
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm create astro@latest -- --template minimal
|
||||||
|
```
|
||||||
|
|
||||||
|
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||||
|
|
||||||
|
## 🚀 Project Structure
|
||||||
|
|
||||||
|
Inside of your Astro project, you'll see the following folders and files:
|
||||||
|
|
||||||
|
```text
|
||||||
|
/
|
||||||
|
├── public/
|
||||||
|
├── src/
|
||||||
|
│ └── pages/
|
||||||
|
│ └── index.astro
|
||||||
|
└── package.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
||||||
|
|
||||||
|
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
||||||
|
|
||||||
|
Any static assets, like images, can be placed in the `public/` directory.
|
||||||
|
|
||||||
|
## 🧞 Commands
|
||||||
|
|
||||||
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
||||||
|
| Command | Action |
|
||||||
|
| :------------------------ | :----------------------------------------------- |
|
||||||
|
| `pnpm install` | Installs dependencies |
|
||||||
|
| `pnpm dev` | Starts local dev server at `localhost:4321` |
|
||||||
|
| `pnpm build` | Build your production site to `./dist/` |
|
||||||
|
| `pnpm preview` | Preview your build locally, before deploying |
|
||||||
|
| `pnpm astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||||
|
| `pnpm astro -- --help` | Get help using the Astro CLI |
|
||||||
|
|
||||||
|
## 👀 Want to learn more?
|
||||||
|
|
||||||
|
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
// @ts-check
|
||||||
|
import { defineConfig } from "astro/config";
|
||||||
|
import tailwindcss from "@tailwindcss/vite";
|
||||||
|
|
||||||
|
// https://astro.build/config
|
||||||
|
export default defineConfig({
|
||||||
|
vite: {
|
||||||
|
plugins: [tailwindcss()],
|
||||||
|
},
|
||||||
|
site: "https://about.last2014.com",
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"name": "www",
|
||||||
|
"type": "module",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"build": "astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@tailwindcss/vite": "^4.1.14",
|
||||||
|
"astro": "^5.14.6",
|
||||||
|
"sharp": "^0.34.4",
|
||||||
|
"tailwindcss": "^4.1.14"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
onlyBuiltDependencies:
|
||||||
|
- esbuild
|
||||||
|
- sharp
|
||||||
|
After Width: | Height: | Size: 121 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M160-80q-17 0-28.5-11.5T120-120v-200q0-33 23.5-56.5T200-400v-160q0-33 23.5-56.5T280-640h160v-58q-18-12-29-29t-11-41q0-15 6-29.5t18-26.5l56-56 56 56q12 12 18 26.5t6 29.5q0 24-11 41t-29 29v58h160q33 0 56.5 23.5T760-560v160q33 0 56.5 23.5T840-320v200q0 17-11.5 28.5T800-80H160Zm120-320h400v-160H280v160Zm-80 240h560v-160H200v160Zm80-240h400-400Zm-80 240h560-560Zm560-240H200h560Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 503 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 327 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M480-400q33 0 56.5-23.5T560-480q0-33-23.5-56.5T480-560q-33 0-56.5 23.5T400-480q0 33 23.5 56.5T480-400ZM320-240h320v-23q0-24-13-44t-36-30q-26-11-53.5-17t-57.5-6q-30 0-57.5 6T369-337q-23 10-36 30t-13 44v23ZM720-80H240q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80Zm0-80v-446L526-800H240v640h480Zm-480 0v-640 640Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 481 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M220-80v-300h-60v-220q0-33 23.5-56.5T240-680h120q33 0 56.5 23.5T440-600v220h-60v300H220Zm80-640q-33 0-56.5-23.5T220-800q0-33 23.5-56.5T300-880q33 0 56.5 23.5T380-800q0 33-23.5 56.5T300-720ZM600-80v-240H480l102-306q8-26 29.5-40t48.5-14q27 0 48.5 14t29.5 40l102 306H720v240H600Zm60-640q-33 0-56.5-23.5T580-800q0-33 23.5-56.5T660-880q33 0 56.5 23.5T740-800q0 33-23.5 56.5T660-720Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 502 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" style="enable-background:new 0 0 640 640" xml:space="preserve" width="32" height="32"><path style="fill:#fff" d="m395.9 484.2-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5 21.2-17.9 33.8-11.8 17.2 8.3 27.1 13 27.1 13l-.1-109.2 16.7-.1.1 117.1s57.4 24.2 83.1 40.1c3.7 2.3 10.2 6.8 12.9 14.4 2.1 6.1 2 13.1-1 19.3l-61 126.9c-6.2 12.7-21.4 18.1-33.9 12z"/><path style="fill:#609926" d="M622.7 149.8c-4.1-4.1-9.6-4-9.6-4s-117.2 6.6-177.9 8c-13.3.3-26.5.6-39.6.7v117.2c-5.5-2.6-11.1-5.3-16.6-7.9 0-36.4-.1-109.2-.1-109.2-29 .4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5c-9.8-.6-22.5-2.1-39 1.5-8.7 1.8-33.5 7.4-53.8 26.9C-4.9 212.4 6.6 276.2 8 285.8c1.7 11.7 6.9 44.2 31.7 72.5 45.8 56.1 144.4 54.8 144.4 54.8s12.1 28.9 30.6 55.5c25 33.1 50.7 58.9 75.7 62 63 0 188.9-.1 188.9-.1s12 .1 28.3-10.3c14-8.5 26.5-23.4 26.5-23.4S547 483 565 451.5c5.5-9.7 10.1-19.1 14.1-28 0 0 55.2-117.1 55.2-231.1-1.1-34.5-9.6-40.6-11.6-42.6zM125.6 353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6 321.8 60 295.4c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5 38.5-30c13.8-3.7 31-3.1 31-3.1s7.1 59.4 15.7 94.2c7.2 29.2 24.8 77.7 24.8 77.7s-26.1-3.1-43-9.1zm300.3 107.6s-6.1 14.5-19.6 15.4c-5.8.4-10.3-1.2-10.3-1.2s-.3-.1-5.3-2.1l-112.9-55s-10.9-5.7-12.8-15.6c-2.2-8.1 2.7-18.1 2.7-18.1L322 273s4.8-9.7 12.2-13c.6-.3 2.3-1 4.5-1.5 8.1-2.1 18 2.8 18 2.8L467.4 315s12.6 5.7 15.3 16.2c1.9 7.4-.5 14-1.8 17.2-6.3 15.4-55 113.1-55 113.1z"/><path style="fill:#609926" d="M326.8 380.1c-8.2.1-15.4 5.8-17.3 13.8-1.9 8 2 16.3 9.1 20 7.7 4 17.5 1.8 22.7-5.4 5.1-7.1 4.3-16.9-1.8-23.1l24-49.1c1.5.1 3.7.2 6.2-.5 4.1-.9 7.1-3.6 7.1-3.6 4.2 1.8 8.6 3.8 13.2 6.1 4.8 2.4 9.3 4.9 13.4 7.3.9.5 1.8 1.1 2.8 1.9 1.6 1.3 3.4 3.1 4.7 5.5 1.9 5.5-1.9 14.9-1.9 14.9-2.3 7.6-18.4 40.6-18.4 40.6-8.1-.2-15.3 5-17.7 12.5-2.6 8.1 1.1 17.3 8.9 21.3 7.8 4 17.4 1.7 22.5-5.3 5-6.8 4.6-16.3-1.1-22.6 1.9-3.7 3.7-7.4 5.6-11.3 5-10.4 13.5-30.4 13.5-30.4.9-1.7 5.7-10.3 2.7-21.3-2.5-11.4-12.6-16.7-12.6-16.7-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3 4.7-9.7 9.4-19.3 14.1-29-4.1-2-8.1-4-12.2-6.1-4.8 9.8-9.7 19.7-14.5 29.5-6.7-.1-12.9 3.5-16.1 9.4-3.4 6.3-2.7 14.1 1.9 19.8l-24.6 50.4z"/></svg>
|
||||||
|
After Width: | Height: | Size: 2.2 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M480-480q33 0 56.5-23.5T560-560q0-33-23.5-56.5T480-640q-33 0-56.5 23.5T400-560q0 33 23.5 56.5T480-480Zm0 294q122-112 181-203.5T720-552q0-109-69.5-178.5T480-800q-101 0-170.5 69.5T240-552q0 71 59 162.5T480-186Zm0 106Q319-217 239.5-334.5T160-552q0-150 96.5-239T480-880q127 0 223.5 89T800-552q0 100-79.5 217.5T480-80Zm0-480Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 445 B |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm320-280L160-640v400h640v-400L480-440Zm0-80 320-200H160l320 200ZM160-640v-80 480-400Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 330 B |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#FFA500"><title>RSS</title><path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/></svg>
|
||||||
|
After Width: | Height: | Size: 417 B |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-155.5t86-127Q252-817 325-848.5T480-880q83 0 155.5 31.5t127 86q54.5 54.5 86 127T880-480q0 82-31.5 155t-86 127.5q-54.5 54.5-127 86T480-80Zm0-82q26-36 45-75t31-83H404q12 44 31 83t45 75Zm-104-16q-18-33-31.5-68.5T322-320H204q29 50 72.5 87t99.5 55Zm208 0q56-18 99.5-55t72.5-87H638q-9 38-22.5 73.5T584-178ZM170-400h136q-3-20-4.5-39.5T300-480q0-21 1.5-40.5T306-560H170q-5 20-7.5 39.5T160-480q0 21 2.5 40.5T170-400Zm216 0h188q3-20 4.5-39.5T580-480q0-21-1.5-40.5T574-560H386q-3 20-4.5 39.5T380-480q0 21 1.5 40.5T386-400Zm268 0h136q5-20 7.5-39.5T800-480q0-21-2.5-40.5T790-560H654q3 20 4.5 39.5T660-480q0 21-1.5 40.5T654-400Zm-16-240h118q-29-50-72.5-87T584-782q18 33 31.5 68.5T638-640Zm-234 0h152q-12-44-31-83t-45-75q-26 36-45 75t-31 83Zm-200 0h118q9-38 22.5-73.5T376-782q-56 18-99.5 55T204-640Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 976 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -0,0 +1,9 @@
|
||||||
|
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||||
|
y="0px" viewBox="0 0 88.3 88.3" style="enable-background:new 0 0 88.3 88.3;" xml:space="preserve">
|
||||||
|
<g fill="#3EA8FF">
|
||||||
|
<path class="st0" d="M3.9,83.3h17c0.9,0,1.7-0.5,2.2-1.2L69.9,5.2c0.6-1-0.1-2.2-1.3-2.2H52.5c-0.8,0-1.5,0.4-1.9,1.1L3.1,81.9
|
||||||
|
C2.8,82.5,3.2,83.3,3.9,83.3z"/>
|
||||||
|
<path class="st0" d="M62.5,82.1l22.1-35.5c0.7-1.1-0.1-2.5-1.4-2.5h-16c-0.6,0-1.2,0.3-1.5,0.8L43,81.2c-0.6,0.9,0.1,2.1,1.2,2.1
|
||||||
|
h16.3C61.3,83.3,62.1,82.9,62.5,82.1z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 565 B |
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
export interface Props {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
img: string;
|
||||||
|
href?: URL;
|
||||||
|
isFullWidth?: true;
|
||||||
|
}
|
||||||
|
---
|
||||||
|
|
||||||
|
<a class={`
|
||||||
|
flex
|
||||||
|
flex-grow
|
||||||
|
items-center
|
||||||
|
${Astro.props.isFullWidth
|
||||||
|
? "w-full"
|
||||||
|
: "w-fit"}
|
||||||
|
p-3
|
||||||
|
rounded
|
||||||
|
shadow-sm
|
||||||
|
mb-3
|
||||||
|
bg-white
|
||||||
|
text-black
|
||||||
|
`} href={Astro.props.href} target="_blank">
|
||||||
|
<img
|
||||||
|
src={new URL(`/icons/${Astro.props.img}`, Astro.url.origin).toString()}
|
||||||
|
alt="アイコン"
|
||||||
|
class={`
|
||||||
|
w-10
|
||||||
|
h-10
|
||||||
|
rounded
|
||||||
|
mr-5
|
||||||
|
object-contain
|
||||||
|
border
|
||||||
|
border-neutral-200
|
||||||
|
shadow-xs
|
||||||
|
`}
|
||||||
|
/>
|
||||||
|
<div class="flex flex-col">
|
||||||
|
<span class="text-lg">{Astro.props.title}</span>
|
||||||
|
<span class="text-xs">{Astro.props.description}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
function getYears(start: number) {
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
if (currentYear > start) {
|
||||||
|
return `${start}-${currentYear}`;
|
||||||
|
} else {
|
||||||
|
return String(start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
---
|
||||||
|
|
||||||
|
<footer class={`
|
||||||
|
p-[2em]
|
||||||
|
bg-gray-200
|
||||||
|
text-slate-500
|
||||||
|
text-center
|
||||||
|
text-[16px]
|
||||||
|
font-[BIZ_UDPGothic]
|
||||||
|
`}>
|
||||||
|
© {getYears(2025)} Last2014. All rights reserved.
|
||||||
|
</footer>
|
||||||
|
<style>
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=BIZ+UDPGothic&display=swap");
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
import Link from "@/components/header/Link.astro";
|
||||||
|
---
|
||||||
|
|
||||||
|
<header class={`
|
||||||
|
backdrop-blur-sm
|
||||||
|
bg-white/80
|
||||||
|
m-auto
|
||||||
|
mx-5
|
||||||
|
mb-8
|
||||||
|
top-[1rem]
|
||||||
|
rounded-[1em]
|
||||||
|
h-[5rem]
|
||||||
|
sticky
|
||||||
|
p-[1em]
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
justify-center
|
||||||
|
shadow-sm
|
||||||
|
`}>
|
||||||
|
<a class={`
|
||||||
|
flex
|
||||||
|
items-center
|
||||||
|
font-[Atkinson_Hyperlegible]
|
||||||
|
font-lg
|
||||||
|
`} href="/">
|
||||||
|
<img
|
||||||
|
src={new URL("/last2014.png", Astro.url.origin).toString()}
|
||||||
|
alt="アバター"
|
||||||
|
class={`
|
||||||
|
w-10
|
||||||
|
mr-2
|
||||||
|
!rounded-[100%]
|
||||||
|
`}
|
||||||
|
/>
|
||||||
|
Last2014
|
||||||
|
</a>
|
||||||
|
</header>
|
||||||
|
<style>
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&display=swap");
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
import type { HTMLAttributes } from "astro/types";
|
||||||
|
|
||||||
|
type Props = HTMLAttributes<"a">;
|
||||||
|
|
||||||
|
const { href, class: className, ...props } = Astro.props;
|
||||||
|
const pathname = Astro.url.pathname.replace(/\/$/, "");
|
||||||
|
const isActive = href === "/"
|
||||||
|
? pathname === ""
|
||||||
|
: pathname === href
|
||||||
|
---
|
||||||
|
|
||||||
|
<a
|
||||||
|
class={`
|
||||||
|
${isActive && `
|
||||||
|
font-bold
|
||||||
|
underline
|
||||||
|
decoration-blue-500
|
||||||
|
decoration-3
|
||||||
|
underline-offset-5
|
||||||
|
`}
|
||||||
|
`}
|
||||||
|
href={href}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
</a>
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
import { type Props as CardProps } from "@/components/Card.astro";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
title: "お問い合わせフォーム",
|
||||||
|
description: "メールアドレスが必要です",
|
||||||
|
img: "contact.svg",
|
||||||
|
href: new URL("https://last2014.com/contact"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "メール(last2014.com)",
|
||||||
|
description: "info@last2014.com",
|
||||||
|
img: "mail.svg",
|
||||||
|
href: new URL("mailto:info@last2014.com"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "メール(yahoo.co.jp)",
|
||||||
|
description: "last2014yh@yahoo.co.jp",
|
||||||
|
img: "mail.svg",
|
||||||
|
href: new URL("mailto:last2014yh@yahoo.co.jp"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Activity Pub",
|
||||||
|
description: "@last2014@misskey.systems",
|
||||||
|
img: "mistems.png",
|
||||||
|
href: new URL("https://misskey.systems/@last2014"),
|
||||||
|
},
|
||||||
|
] as CardProps[];
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { type Props as CardProps } from "@/components/Card.astro";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
title: "活動開始日",
|
||||||
|
description: "2025/5/31",
|
||||||
|
img: "calendar.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "誕生日",
|
||||||
|
description: "2014/12/8",
|
||||||
|
img: "cake.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "場所",
|
||||||
|
description: "神奈川県",
|
||||||
|
img: "location.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "性別",
|
||||||
|
description: "男性",
|
||||||
|
img: "gender.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "出身",
|
||||||
|
description: "神奈川県川崎市",
|
||||||
|
img: "world.svg",
|
||||||
|
},
|
||||||
|
] as CardProps[];
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { type Props as CardProps } from "@/components/Card.astro";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
title: "Last2014's Blog",
|
||||||
|
description: "@last2014@last2014.com",
|
||||||
|
img: "rss.svg",
|
||||||
|
href: new URL("https://last2014.com"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "WakaTime",
|
||||||
|
description: "@last2014@wakatime.com",
|
||||||
|
img: "wakatime.png",
|
||||||
|
href: new URL("https://wakatime.com/@last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Gitea",
|
||||||
|
description: "@last2014@gitea.last2014.com",
|
||||||
|
img: "gitea.svg",
|
||||||
|
href: new URL("https://gitea.last2014.com/last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "みすてむず いず みすきーしすてむず",
|
||||||
|
description: "@last2014@misskey.systems",
|
||||||
|
img: "mistems.png",
|
||||||
|
href: new URL("https://misskey.systems/@last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "ゆずねっと",
|
||||||
|
description: "@last2014@uwuzu.net",
|
||||||
|
img: "uwuzunet.png",
|
||||||
|
href: new URL("https://uwuzu.net/@last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Zenn",
|
||||||
|
description: "@last2014@zenn.dev",
|
||||||
|
img: "zenn.svg",
|
||||||
|
href: new URL("https://zenn.dev/last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Qiita",
|
||||||
|
description: "@last2014@qiita.com",
|
||||||
|
img: "qiita.png",
|
||||||
|
href: new URL("https://qiita.com/last2014"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "ニコニコ動画",
|
||||||
|
description: "@140339612@nicovideo.jp",
|
||||||
|
img: "nicovideo.png",
|
||||||
|
href: new URL("https://nicovideo.jp/user/140339612"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Yahoo! 知恵袋",
|
||||||
|
description: "@1154047737@chiebukuro.yahoo.co.jp",
|
||||||
|
img: "yahoo.png",
|
||||||
|
href: new URL("https://chiebukuro.yahoo.co.jp/user/1154047737"),
|
||||||
|
},
|
||||||
|
] as CardProps[];
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
---
|
||||||
|
import Header from "@/components/header/Header.astro";
|
||||||
|
import Footer from "@/components/Footer.astro";
|
||||||
|
import "@/styles/global.css";
|
||||||
|
import "@/styles/tailwind.css";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
title?: string;
|
||||||
|
description?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const title = Astro.props.title
|
||||||
|
? Astro.props.title + " - Last2014"
|
||||||
|
: "Last2014";
|
||||||
|
---
|
||||||
|
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="ja" prefix="og: https://ogp.me/ns#">
|
||||||
|
<head>
|
||||||
|
<!-- Global -->
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="generator" content={Astro.generator} />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
<meta name="color-scheme" content="light dark" />
|
||||||
|
{Astro.site && (
|
||||||
|
<link rel="canonical" href={Astro.site.href} />
|
||||||
|
)}
|
||||||
|
<!-- Primary -->
|
||||||
|
{Astro.props.description && (
|
||||||
|
<meta name="description" content={Astro.props.description} />
|
||||||
|
)}
|
||||||
|
<title>{title}</title>
|
||||||
|
<meta name="title" content={title}>
|
||||||
|
<!-- Open Graph -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content={Astro.url.href} />
|
||||||
|
<meta property="og:site_name" content="Last2014" />
|
||||||
|
<meta property="og:title" content={Astro.props.title ?? "Last2014"} />
|
||||||
|
{Astro.props.description && (
|
||||||
|
<meta property="og:description" content={Astro.props.description}>
|
||||||
|
)}
|
||||||
|
<meta property="og:locale" content="ja_JP" />
|
||||||
|
<meta property="og:image" content={new URL("/last2014.png", Astro.url)} />
|
||||||
|
<!-- Twitter Card -->
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:url" content={Astro.url.href}>
|
||||||
|
<meta name="twitter:domain" content={Astro.url.hostname} />
|
||||||
|
<meta name="twitter:title" content={title}>
|
||||||
|
{Astro.props.description && (
|
||||||
|
<meta name="twitter:description" content={Astro.props.description}>
|
||||||
|
)}
|
||||||
|
<meta name="twitter:image" content={new URL("/last2014.png", Astro.url)}>
|
||||||
|
<!-- Astro -->
|
||||||
|
</head>
|
||||||
|
<body class={`
|
||||||
|
bg-neutral-100
|
||||||
|
text-black
|
||||||
|
min-h-screen
|
||||||
|
flex
|
||||||
|
flex-col
|
||||||
|
`}>
|
||||||
|
<Header />
|
||||||
|
<main class={`
|
||||||
|
flex
|
||||||
|
flex-grow
|
||||||
|
flex-col
|
||||||
|
items-center
|
||||||
|
`}>
|
||||||
|
<slot />
|
||||||
|
</main>
|
||||||
|
<Footer />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
import Layout from "@/layouts/Layout.astro";
|
||||||
|
|
||||||
|
const legacyLink = new URL(Astro.url.pathname, "https://last2014.com").toString();
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<span class="text-4xl font-bold">Not Found</span>
|
||||||
|
<p><code>{Astro.url.pathname}</code>が見つかりませんでした。</p>
|
||||||
|
|
||||||
|
<span class="mt-3 text-2xl">もしかして...</span>
|
||||||
|
<p>
|
||||||
|
<a
|
||||||
|
href="https://legacy.last2014.com"
|
||||||
|
class="underline text-blue-500"
|
||||||
|
>従来のサイト</a>のページをお探しですか?
|
||||||
|
</p>
|
||||||
|
<a
|
||||||
|
class="underline text-blue-500"
|
||||||
|
href={legacyLink}
|
||||||
|
>
|
||||||
|
<code>{legacyLink}</code>に移動できます
|
||||||
|
</a>
|
||||||
|
</Layout>
|
||||||
|
|
@ -0,0 +1,96 @@
|
||||||
|
---
|
||||||
|
import Layout from "@/layouts/Layout.astro";
|
||||||
|
import Card from "@/components/Card.astro";
|
||||||
|
import details from "@/constants/details";
|
||||||
|
import links from "@/constants/links";
|
||||||
|
import contacts from "@/constants/contacts";
|
||||||
|
---
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<div class={`
|
||||||
|
flex
|
||||||
|
justify-between
|
||||||
|
bg-white
|
||||||
|
shadow-sm
|
||||||
|
w-fit
|
||||||
|
rounded
|
||||||
|
p-5
|
||||||
|
`}>
|
||||||
|
<img
|
||||||
|
src={new URL("/last2014.png", Astro.url.origin).toString()}
|
||||||
|
alt="アバター"
|
||||||
|
class={`
|
||||||
|
w-15
|
||||||
|
h-15
|
||||||
|
mr-2
|
||||||
|
!rounded-[100%]
|
||||||
|
`}
|
||||||
|
/>
|
||||||
|
<div class="flex flex-grow flex-col">
|
||||||
|
<span class="text-xl font-bold">Last2014</span>
|
||||||
|
<p class="text-sm">
|
||||||
|
ウェブ開発一生やってる小学生です。<br />
|
||||||
|
TypeScriptをメインに色々作っています。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class={`
|
||||||
|
flex
|
||||||
|
flex-col
|
||||||
|
gap-3
|
||||||
|
w-full
|
||||||
|
p-5
|
||||||
|
`}>
|
||||||
|
<span class="font-bold text-4xl w-full mb-3">詳細</span>
|
||||||
|
|
||||||
|
{details.map((detail) => (
|
||||||
|
<Card
|
||||||
|
title={detail.title}
|
||||||
|
description={detail.description}
|
||||||
|
img={detail.img}
|
||||||
|
href={detail.href}
|
||||||
|
isFullWidth
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class={`
|
||||||
|
flex
|
||||||
|
flex-wrap
|
||||||
|
gap-3
|
||||||
|
w-fit
|
||||||
|
p-5
|
||||||
|
`}>
|
||||||
|
<span class="font-bold text-4xl w-full mb-3">リンク</span>
|
||||||
|
|
||||||
|
{links.map((link) => (
|
||||||
|
<Card
|
||||||
|
title={link.title}
|
||||||
|
description={link.description}
|
||||||
|
img={link.img}
|
||||||
|
href={link.href}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class={`
|
||||||
|
flex
|
||||||
|
flex-col
|
||||||
|
gap-3
|
||||||
|
w-full
|
||||||
|
p-5
|
||||||
|
`}>
|
||||||
|
<span class="font-bold text-4xl w-full mb-3">連絡先</span>
|
||||||
|
|
||||||
|
{contacts.map((contact) => (
|
||||||
|
<Card
|
||||||
|
title={contact.title}
|
||||||
|
description={contact.description}
|
||||||
|
img={contact.img}
|
||||||
|
href={contact.href}
|
||||||
|
isFullWidth
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</Layout>
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap");
|
||||||
|
|
||||||
|
@layer base {
|
||||||
|
*, ::after, ::before, ::backdrop, ::file-selector-button {
|
||||||
|
font-family: "Noto Sans JP";
|
||||||
|
font-weight: 400;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0 solid;
|
||||||
|
line-height: 1.7;
|
||||||
|
font-size: 18px;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--color-blue-600);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
scroll-padding-top: 6rem;
|
||||||
|
overscroll-behavior: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 3.052em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 2.441em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1.953em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 1.563em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
padding: 2px 5px;
|
||||||
|
background-color: var(--color-gray-300);
|
||||||
|
color: var(--color-black);
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1.5em;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre > code {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
strong, b {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
border-left: 4px solid var(--color-blue-600);
|
||||||
|
padding: 0 0 0 20px;
|
||||||
|
margin: 0px;
|
||||||
|
font-size: 1.333em;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
@import "tailwindcss";
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/strict",
|
||||||
|
"include": [".astro/types.d.ts", "**/*"],
|
||||||
|
"exclude": ["dist"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"],
|
||||||
|
"assets/*": ["./src/assets/*"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||