+1
.tangled/workflows/deploy.yml
+1
.tangled/workflows/deploy.yml
+7
-6
bun.lock
+7
-6
bun.lock
···
1
1
{
2
2
"lockfileVersion": 1,
3
+
"configVersion": 1,
3
4
"workspaces": {
4
5
"": {
5
6
"name": "bun-react-template",
···
7
8
"@radix-ui/react-label": "^2.1.7",
8
9
"@radix-ui/react-select": "^2.2.6",
9
10
"@radix-ui/react-slot": "^1.2.3",
10
-
"atproto-ui": "^0.7.2",
11
+
"atproto-ui": "0.11.3",
11
12
"bun-plugin-tailwind": "^0.1.2",
12
13
"class-variance-authority": "^0.7.1",
13
14
"clsx": "^2.1.1",
···
132
133
133
134
"@types/bun": ["@types/bun@1.3.2", "", { "dependencies": { "bun-types": "1.3.2" } }, "sha512-t15P7k5UIgHKkxwnMNkJbWlh/617rkDGEdSsDbu+qNHTaz9SKf7aC8fiIlUdD5RPpH6GEkP0cK7WlvmrEBRtWg=="],
134
135
135
-
"@types/node": ["@types/node@24.10.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A=="],
136
+
"@types/node": ["@types/node@24.10.1", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ=="],
136
137
137
-
"@types/react": ["@types/react@19.2.2", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA=="],
138
+
"@types/react": ["@types/react@19.2.3", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-k5dJVszUiNr1DSe8Cs+knKR6IrqhqdhpUwzqhkS8ecQTSf3THNtbfIp/umqHMpX2bv+9dkx3fwDv/86LcSfvSg=="],
138
139
139
-
"@types/react-dom": ["@types/react-dom@19.2.2", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw=="],
140
+
"@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
140
141
141
142
"aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="],
142
143
143
-
"atproto-ui": ["atproto-ui@0.7.2", "", { "dependencies": { "@atcute/atproto": "^3.1.7", "@atcute/bluesky": "^3.2.3", "@atcute/client": "^4.0.3", "@atcute/identity-resolver": "^1.1.3", "@atcute/tangled": "^1.0.6" }, "peerDependencies": { "react": "^18.2.0 || ^19.0.0", "react-dom": "^18.2.0 || ^19.0.0" }, "optionalPeers": ["react-dom"] }, "sha512-bVHjur5Wh5g+47p8Zaq7iZkd5zpqw5A8xg0z5rsDWkmRvqO8E3kZbL9Svco0qWQM/jg4akG/97Vn1XecATovzg=="],
144
+
"atproto-ui": ["atproto-ui@0.11.3", "", { "dependencies": { "@atcute/atproto": "^3.1.7", "@atcute/bluesky": "^3.2.3", "@atcute/client": "^4.0.3", "@atcute/identity-resolver": "^1.1.3", "@atcute/tangled": "^1.0.10" }, "peerDependencies": { "react": "^18.2.0 || ^19.0.0", "react-dom": "^18.2.0 || ^19.0.0" }, "optionalPeers": ["react-dom"] }, "sha512-NIBsORuo9lpCpr1SNKcKhNvqOVpsEy9IoHqFe1CM9gNTArpQL1hUcoP1Cou9a1O5qzCul9kaiu5xBHnB81I/WQ=="],
144
145
145
146
"bun": ["bun@1.3.2", "", { "optionalDependencies": { "@oven/bun-darwin-aarch64": "1.3.2", "@oven/bun-darwin-x64": "1.3.2", "@oven/bun-darwin-x64-baseline": "1.3.2", "@oven/bun-linux-aarch64": "1.3.2", "@oven/bun-linux-aarch64-musl": "1.3.2", "@oven/bun-linux-x64": "1.3.2", "@oven/bun-linux-x64-baseline": "1.3.2", "@oven/bun-linux-x64-musl": "1.3.2", "@oven/bun-linux-x64-musl-baseline": "1.3.2", "@oven/bun-windows-x64": "1.3.2", "@oven/bun-windows-x64-baseline": "1.3.2" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "x64", "arm64", ], "bin": { "bun": "bin/bun.exe", "bunx": "bin/bunx.exe" } }, "sha512-x75mPJiEfhO1j4Tfc65+PtW6ZyrAB6yTZInydnjDZXF9u9PRAnr6OK3v0Q9dpDl0dxRHkXlYvJ8tteJxc8t4Sw=="],
146
147
···
174
175
175
176
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
176
177
177
-
"tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="],
178
+
"tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="],
178
179
179
180
"tailwindcss": ["tailwindcss@4.1.17", "", {}, "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q=="],
180
181
+1
-1
package.json
+1
-1
package.json
+12
-22
src/components/sections/Header.tsx
+12
-22
src/components/sections/Header.tsx
···
1
1
import type { RefObject } from "react"
2
+
import { CurrentlyPlaying, LastPlayed, type AtProtoStyles } from "atproto-ui"
2
3
import { personalInfo, currentRole, skills } from "../../data/portfolio"
3
4
4
5
interface HeaderProps {
···
26
27
<div className="absolute inset-0 bg-background/70"></div>
27
28
</div>
28
29
29
-
<div className="grid lg:grid-cols-5 gap-12 sm:gap-16 w-full relative z-10">
30
+
<div className="grid lg:grid-cols-5 gap-12 sm:gap-16 w-full relative z-10 items-center">
30
31
<div className="lg:col-span-3 space-y-6 sm:space-y-8">
31
32
<div className="space-y-3 sm:space-y-2">
32
33
<div className="text-sm text-gray-300 font-mono tracking-wider">PORTFOLIO / 2025</div>
···
37
38
</h1>
38
39
</div>
39
40
40
-
<div className="space-y-6 max-w-md">
41
+
<div className="space-y-6 max-w-md ">
41
42
<p className="text-lg sm:text-xl text-stone-200 leading-relaxed">
42
43
{personalInfo.description.map((part, i) => {
43
44
if (part.url) {
···
119
120
120
121
<div className="lg:col-span-2 flex flex-col justify-end space-y-6 sm:space-y-8 mt-8 lg:mt-0">
121
122
<div className="space-y-4">
122
-
<div className="text-sm text-gray-300 font-mono">CURRENTLY</div>
123
-
<div className="space-y-2">
124
-
<div className="text-white">{currentRole.title}</div>
125
-
<div className="text-sm text-gray-300">{personalInfo.availability.location}</div>
126
-
<div className="text-gray-300">@ {currentRole.company}</div>
127
-
<div className="text-xs text-gray-100">{currentRole.period}</div>
128
-
</div>
129
-
</div>
130
-
131
-
<div className="space-y-4">
132
-
<div className="text-sm text-gray-300 font-mono">FOCUS</div>
133
-
<div className="flex flex-wrap gap-2">
134
-
{skills.map((skill) => (
135
-
<span
136
-
key={skill}
137
-
className="glass glass-hover px-3 py-1 text-xs rounded-full transition-colors duration-300"
138
-
>
139
-
{skill}
140
-
</span>
141
-
))}
123
+
<p className="text-sm text-gray-300 font-mono">IM LISTENING TO:</p>
124
+
<div className="glass rounded-2xl" style={{
125
+
'--atproto-color-bg': 'transparent',
126
+
'--atproto-color-border': 'transparent',
127
+
'--atproto-color-bg-elevated': 'rgba(255, 255, 255, 0.20)',
128
+
'--atproto-color-text': 'white',
129
+
'--atproto-color-text-secondary': 'rgba(255, 255, 255, 0.80)',
130
+
} as AtProtoStyles }>
131
+
<CurrentlyPlaying did="nekomimi.pet"/>
142
132
</div>
143
133
</div>
144
134
</div>
+1
-1
src/components/ui/card.tsx
+1
-1
src/components/ui/card.tsx
+1
-1
src/index.html
+1
-1
src/index.html
+3
-2
styles/globals.css
+3
-2
styles/globals.css
···
130
130
--shadow-color: rgba(255, 255, 255, 0.7);
131
131
132
132
/* Painted glass */
133
-
--tint-color: rgba(255, 255, 255, 0.08);
134
-
--tint-opacity: 0.4;
133
+
--tint-color: rgba(255, 255, 255, 0.28);
134
+
--tint-opacity: 1;
135
135
136
136
/* Background frost */
137
137
--frost-blur: 2px;
···
162
162
box-shadow:
163
163
/*0 0 0 2px rgba(255, 255, 255, 0.7),*/
164
164
0 20px 40px rgba(0, 0, 0, 0.16);
165
+
transform: scale(1.05); /* Scales to 105% of original size */
165
166
}
166
167
}