rename page

This commit is contained in:
2026-05-18 12:45:57 +08:00
parent 18fc9849a3
commit f3527c889b
12 changed files with 1212 additions and 18 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

View File

@@ -0,0 +1,97 @@
/**
* nudoragon Linktree Configuration
*
* 只需要修改這裡的內容,頁面就會自動更新。
*/
const CONFIG = {
profile: {
name: "nudoragon",
bio: "設計與開發的探索者 | 建立數位世界的連結",
avatar: "avatar.png", // 已從部落格擷取
favicon: "avatar.png", // 使用與 avatar 相同的圖片作為 favicon
copyrightYear: 2026
},
links: [
{
title: "聯絡我",
desc: "透過電子郵件與我聯繫",
url: "mailto:hi@l.nudoragon.com",
icon: "fas fa-envelope",
delay: "0.1s",
category: "contact",
visible: true,
order: 1
},
{
title: "Element (Matrix)",
desc: "透過 Matrix 協議與我通訊servermatrix.nudoragon.com",
url: "https://element.nudoragon.com",
icon: "fas fa-comments",
delay: "0.2s",
category: "contact",
visible: true,
order: 2
},
{
title: "個人部落格",
desc: "分享技術開發與生活紀錄",
url: "https://blog.nudoragon.com",
icon: "fas fa-blog",
delay: "0.3s",
category: "content",
visible: true,
order: 3
},
{
title: "Gitea",
desc: "查看我的開源專案與代碼",
url: "https://code.nudoragon.com",
icon: "fas fa-code-branch",
delay: "0.4s",
category: "development",
visible: true,
order: 4
},
{
title: "系統狀態",
desc: "監控各項服務運行狀況",
url: "https://status.nudoragon.com",
icon: "fas fa-heartbeat",
delay: "0.5s",
category: "service",
visible: true,
order: 5
},
{
title: "NudoAuth 透透龍女",
desc: "統一身份認證與授權服務",
url: "https://auth.nudoragon.com",
icon: "fas fa-user-shield",
delay: "0.6s",
category: "service",
visible: true,
order: 6
},
{
title: "Stickers 模組",
desc: "我開發的貼圖服務系統",
url: "https://stickers.example.com",
icon: "fas fa-code",
delay: "0.7s",
category: "development",
visible: false,
order: 7
}
],
socials: [
{ name: "Instagram", url: "https://www.instagram.com/nudoragon/", icon: "fab fa-instagram", visible: true, order: 1 },
{ name: "Threads", url: "https://www.threads.net/@nudoragon", icon: "fas fa-at", visible: true, order: 2, note: "使用 @ 符號替代" },
{ name: "Facebook", url: "https://www.facebook.com/nudoragon/", icon: "fab fa-facebook", visible: true, order: 3 },
{ name: "Twitter", url: "https://twitter.com/nudoragon", icon: "fab fa-twitter", visible: true, order: 4 },
{ name: "Bluesky", url: "https://bsky.app/profile/nudoragon.bsky.social", icon: "fas fa-cloud", visible: true, order: 5, note: "使用雲朵圖標替代" },
{ name: "Discord", url: "https://discord.gg/nHjUJJXGVG", icon: "fab fa-discord", visible: true, order: 6 },
{ name: "Line", url: "#", icon: "fab fa-line", visible: false, order: 7 },
{ name: "Telegram", url: "#", icon: "fab fa-telegram", visible: false, order: 8 },
{ name: "Mail", url: "mailto:hi@l.nudoragon.com", icon: "fas fa-envelope", visible: true, order: 9 }
]
};

View File

@@ -0,0 +1,168 @@
<!DOCTYPE html>
<html lang="zh-TW" =""="" =""><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>nudoragon | 個人連結</title>
<meta name="description" content="nudoragon 的個人品牌與社交連結入口。包含部落格、專案與聯絡資訊。">
<link rel="icon" id="favicon" href="avatar.png">
<link rel="stylesheet" href="style.css">
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&amp;family=Outfit:wght@400;600;800&amp;display=swap" rel="stylesheet">
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style id="vvvebjs-styles">#footer-section {
display: inline;
}
#social-icons {
display: inline-flex;
}
</style></head>
<body>
<div class="background-blobs">
<div class="blob blob-1"></div>
<div class="blob blob-2"></div>
<div class="blob blob-3"></div>
</div>
<main class="container">
<header class="profile animate-fade-in" id="profile-header">
<div class="avatar-container">
<img src="avatar.png" alt="nudoragon Avatar" class="avatar">
<div class="avatar-ring"></div>
</div>
<h1 class="name">nudoragon</h1>
<p class="bio">設計與開發的探索者 | 建立數位世界的連結</p>
</header>
<section class="links-container" id="links-container">
<a href="mailto:hi@l.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.1s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-envelope"></i></div>
<div class="link-content">
<span class="link-title">聯絡我</span>
<span class="link-desc">透過電子郵件與我聯繫</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
<a href="https://element.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.2s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-comments"></i></div>
<div class="link-content">
<span class="link-title">Element (Matrix)</span>
<span class="link-desc">透過 Matrix 協議與我通訊servermatrix.nudoragon.com</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
<a href="https://blog.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.3s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-blog"></i></div>
<div class="link-content">
<span class="link-title">個人部落格</span>
<span class="link-desc">分享技術開發與生活紀錄</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
<a href="https://code.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.4s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-code-branch"></i></div>
<div class="link-content">
<span class="link-title">Gitea</span>
<span class="link-desc">查看我的開源專案與代碼</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
<a href="https://status.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.5s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-heartbeat"></i></div>
<div class="link-content">
<span class="link-title">系統狀態</span>
<span class="link-desc">監控各項服務運行狀況</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
<a href="https://auth.nudoragon.com" class="link-card animate-slide-up" style="animation-delay: 0.6s;" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="fas fa-user-shield"></i></div>
<div class="link-content">
<span class="link-title">NudoAuth 透透龍女</span>
<span class="link-desc">統一身份認證與授權服務</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
</section>
<footer class="footer animate-fade-in" id="footer-section">
<div class="social-icons" id="social-icons">
<a href="https://www.instagram.com/nudoragon/" title="Instagram" target="_blank" rel="noopener noreferrer"><i class="fab fa-instagram"></i></a>
<a href="https://www.threads.net/@nudoragon" title="Threads - 使用 @ 符號替代" target="_blank" rel="noopener noreferrer"><i class="fas fa-at"></i></a>
<a href="https://www.facebook.com/nudoragon/" title="Facebook" target="_blank" rel="noopener noreferrer"><i class="fab fa-facebook"></i></a>
<a href="https://twitter.com/nudoragon" title="Twitter" target="_blank" rel="noopener noreferrer"><i class="fab fa-twitter"></i></a>
<a href="https://bsky.app/profile/nudoragon.bsky.social" title="Bluesky - 使用雲朵圖標替代" target="_blank" rel="noopener noreferrer"><i class="fas fa-cloud"></i></a>
<a href="https://discord.gg/nHjUJJXGVG" title="Discord" target="_blank" rel="noopener noreferrer"><i class="fab fa-discord"></i></a>
<a href="mailto:hi@l.nudoragon.com" title="Mail" target="_blank" rel="noopener noreferrer"><i class="fas fa-envelope"></i></a>
</div>
<p class="copyright" id="copyright-text">© 2026 nudoragon. All rights reserved.</p>
</footer>
</main>
<script src="config.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
// Set Favicon
document.getElementById('favicon').href = CONFIG.profile.favicon;
// Render Profile
const header = document.getElementById('profile-header');
header.innerHTML = `
<div class="avatar-container">
<img src="${CONFIG.profile.avatar}" alt="${CONFIG.profile.name} Avatar" class="avatar">
<div class="avatar-ring"></div>
</div>
<h1 class="name">${CONFIG.profile.name}</h1>
<p class="bio">${CONFIG.profile.bio}</p>
`;
// Render Links - 支援可見性和排序
const linksContainer = document.getElementById('links-container');
const visibleLinks = CONFIG.links
.filter(link => link.visible !== false)
.sort((a, b) => (a.order || 0) - (b.order || 0));
linksContainer.innerHTML = visibleLinks.map(link => `
<a href="${link.url}" class="link-card animate-slide-up" style="animation-delay: ${link.delay};" target="_blank" rel="noopener noreferrer">
<div class="link-icon"><i class="${link.icon}"></i></div>
<div class="link-content">
<span class="link-title">${link.title}</span>
<span class="link-desc">${link.desc}</span>
</div>
<div class="link-arrow"><i class="fas fa-chevron-right"></i></div>
</a>
`).join('');
// Render Socials - 支援可見性和排序
const socialIcons = document.getElementById('social-icons');
const visibleSocials = CONFIG.socials
.filter(social => social.visible !== false)
.sort((a, b) => (a.order || 0) - (b.order || 0));
socialIcons.innerHTML = visibleSocials.map(social => `
<a href="${social.url}" title="${social.name}${social.note ? ' - ' + social.note : ''}" target="_blank" rel="noopener noreferrer"><i class="${social.icon}"></i></a>
`).join('');
// Render Copyright
document.getElementById('copyright-text').innerHTML = `&copy; ${CONFIG.profile.copyrightYear} ${CONFIG.profile.name}. All rights reserved.`;
});
</script>
</body></html>

View File

@@ -0,0 +1,6 @@
{
"name": "linktree-test",
"slug": "linktree-test",
"description": "",
"created_at": "2026-05-18T04:37:34"
}

View File

@@ -0,0 +1,297 @@
/* CSS Variables & Design Tokens */
:root {
--primary-color: #6366f1;
--accent-color: #a855f7;
--bg-dark: #0f172a;
--card-bg: rgba(30, 41, 59, 0.7);
--text-primary: #f8fafc;
--text-secondary: #94a3b8;
--glass-border: rgba(255, 255, 255, 0.1);
--transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Base Reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
background-color: var(--bg-dark);
color: var(--text-primary);
line-height: 1.5;
overflow-x: hidden;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: flex-start;
padding: 2rem 1rem;
}
/* Background Blobs */
.background-blobs {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
overflow: hidden;
}
.blob {
position: absolute;
border-radius: 50%;
filter: blur(80px);
opacity: 0.4;
animation: blob-float 20s infinite alternate;
}
.blob-1 {
width: 400px;
height: 400px;
background: var(--primary-color);
top: -100px;
left: -100px;
}
.blob-2 {
width: 300px;
height: 300px;
background: var(--accent-color);
bottom: -50px;
right: -50px;
animation-delay: -5s;
}
.blob-3 {
width: 250px;
height: 250px;
background: #ec4899;
top: 40%;
left: 60%;
animation-delay: -10s;
}
@keyframes blob-float {
0% { transform: translate(0, 0) scale(1); }
100% { transform: translate(50px, 50px) scale(1.1); }
}
/* Container */
.container {
width: 100%;
max-width: 580px;
text-align: center;
position: relative;
z-index: 1;
}
/* Profile Section */
.profile {
margin-bottom: 3rem;
}
.avatar-container {
position: relative;
width: 120px;
height: 120px;
margin: 0 auto 1.5rem;
}
.avatar {
width: 100%;
height: 100%;
border-radius: 50%;
object-fit: cover;
border: 4px solid var(--glass-border);
position: relative;
z-index: 2;
}
.avatar-ring {
position: absolute;
top: -8px;
left: -8px;
right: -8px;
bottom: -8px;
border-radius: 50%;
background: linear-gradient(45deg, var(--primary-color), var(--accent-color));
opacity: 0.5;
z-index: 1;
animation: ring-pulse 3s infinite;
}
@keyframes ring-pulse {
0% { transform: scale(1); opacity: 0.5; }
50% { transform: scale(1.05); opacity: 0.2; }
100% { transform: scale(1); opacity: 0.5; }
}
.name {
font-family: 'Outfit', sans-serif;
font-size: 2.2rem;
font-weight: 800;
margin-bottom: 0.5rem;
letter-spacing: -0.02em;
}
.bio {
color: var(--text-secondary);
font-size: 1.1rem;
max-width: 80%;
margin: 0 auto;
}
/* Links Section */
.links-container {
display: flex;
flex-direction: column;
gap: 1.2rem;
margin-bottom: 3rem;
}
.link-card {
display: flex;
align-items: center;
background: var(--card-bg);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid var(--glass-border);
border-radius: 1.2rem;
padding: 1.2rem;
text-decoration: none;
color: inherit;
transition: var(--transition);
text-align: left;
}
.link-card:hover {
transform: translateY(-5px) scale(1.02);
background: rgba(45, 55, 72, 0.8);
border-color: rgba(255, 255, 255, 0.2);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3);
}
.link-icon {
width: 50px;
height: 50px;
background: rgba(255, 255, 255, 0.1);
border-radius: 0.8rem;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.5rem;
margin-right: 1.2rem;
color: var(--primary-color);
transition: var(--transition);
}
.link-card:hover .link-icon {
background: var(--primary-color);
color: white;
}
.link-content {
flex: 1;
}
.link-title {
display: block;
font-weight: 600;
font-size: 1.1rem;
margin-bottom: 0.2rem;
}
.link-desc {
display: block;
font-size: 0.9rem;
color: var(--text-secondary);
}
.link-arrow {
color: var(--text-secondary);
opacity: 0.5;
transition: var(--transition);
}
.link-card:hover .link-arrow {
transform: translateX(5px);
opacity: 1;
color: var(--primary-color);
}
/* Footer Section */
.footer {
padding-bottom: 2rem;
}
.social-icons {
display: flex;
justify-content: center;
gap: 2rem;
margin-bottom: 1.5rem;
}
.social-icons a {
color: var(--text-secondary);
font-size: 1.8rem;
transition: var(--transition);
}
.social-icons a:hover {
color: var(--primary-color);
transform: scale(1.2);
}
.copyright {
color: var(--text-secondary);
font-size: 0.85rem;
opacity: 0.6;
}
/* Animations */
.animate-fade-in {
opacity: 0;
animation: fade-in 1s forwards;
}
.animate-slide-up {
opacity: 0;
transform: translateY(20px);
animation: slide-up 0.8s forwards;
}
@keyframes fade-in {
to { opacity: 1; }
}
@keyframes slide-up {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Responsive Adjustments */
@media (max-width: 480px) {
body {
padding: 1.5rem 0.8rem;
}
.name {
font-size: 1.8rem;
}
.bio {
font-size: 1rem;
}
.link-icon {
width: 44px;
height: 44px;
font-size: 1.2rem;
}
}

View File

@@ -4,7 +4,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>My page</title>
<title>About us</title>
<!-- Bootstrap core CSS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
@@ -23,11 +23,10 @@
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<h1 class="mt-5">Bootstrap 5 start page</h1>
<h1 class="mt-5">About Us page</h1>
<p class="lead">Start by dragging components to page or double click to edit text</p>
</div>
</div>
</div>
</body></html>

View File

@@ -34,7 +34,7 @@
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a><a class="nav-link" href="about-us.html">About</a>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>