From fe045acf3301b8a77ab2582a10cc04e1fa9f865b Mon Sep 17 00:00:00 2001 From: shrvansudhakara Date: Sat, 1 Nov 2025 22:53:17 +0530 Subject: [PATCH 1/2] feat: add configuration system for section and element visibility - Add config.yml for toggling visibility of sections and UI elements - Implement config utility for dynamic visibility handling - Add visibility controls for work experience, talks, writing, and social links - Add visibility controls for avatar, theme switch, footer, and header - Wrap components with config checks throughout the app - Install js-yaml for YAML parsing - Supports live updates without server restart (auto-refresh on save) Resolves #15 --- bun.lockb | Bin 211796 -> 212199 bytes config.yml | 14 +++++ package.json | 2 + src/components/partials/Footer.astro | 15 ++++-- src/components/partials/Header.astro | 74 +++++++++++++++------------ src/layouts/BaseLayout.astro | 6 ++- src/lib/config.ts | 46 +++++++++++++++++ src/pages/index.astro | 37 ++++++++------ 8 files changed, 139 insertions(+), 55 deletions(-) create mode 100644 config.yml create mode 100644 src/lib/config.ts diff --git a/bun.lockb b/bun.lockb index a879dcb2fe85c7ed48e3df61b59bd2b6240a5baa..41ae62e399a3e42d92633e19a54782846d657139 100755 GIT binary patch delta 34776 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 delta 34675 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 diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..e7ae07e --- /dev/null +++ b/config.yml @@ -0,0 +1,14 @@ +# Site Configuration - Control visibility of sections +sections: + about: true + workExperience: true + talks: true + writing: true + socialLinks: true + +# Individual elements +elements: + avatar: true + themeSwitch: true + header: true + footer: true diff --git a/package.json b/package.json index c34bd85..204a0be 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,12 @@ "@astrojs/sitemap": "3.6.0", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.16", + "@types/js-yaml": "^4.0.9", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", "astro": "5.15.2", "framer-motion": "^12.23.24", + "js-yaml": "^4.1.0", "lucide-react": "^0.548.0", "mdast-util-to-string": "^4.0.0", "react": "^18.3.1", diff --git a/src/components/partials/Footer.astro b/src/components/partials/Footer.astro index ca9114b..54b75c7 100644 --- a/src/components/partials/Footer.astro +++ b/src/components/partials/Footer.astro @@ -1,9 +1,14 @@ --- import Container from '@/components/Container.astro'; +import { getSiteConfig } from '@/lib/config'; + +const config = getSiteConfig(); --- - -

- © {new Date().getFullYear()}. Powered by Astro and CVfolio. -

-
+{config.elements.footer && ( + +

+ © {new Date().getFullYear()}. Powered by Astro and CVfolio. +

+
+)} \ No newline at end of file diff --git a/src/components/partials/Header.astro b/src/components/partials/Header.astro index 47a431e..7d54795 100644 --- a/src/components/partials/Header.astro +++ b/src/components/partials/Header.astro @@ -1,43 +1,49 @@ --- import Container from '@/components/Container.astro'; +import { getSiteConfig } from '@/lib/config'; const pathname = Astro.url.pathname; const isHomePage = pathname === '/'; const isWritingPage = pathname.startsWith('/writing'); ---- - -
- -
-
+
+ +
+ +)} \ No newline at end of file diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index b9ba860..1175030 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -6,12 +6,14 @@ import Header from '@/components/partials/Header.astro'; import Footer from '@/components/partials/Footer.astro'; import Head from '@/components/partials/Head.astro'; import SwitchTheme from '@/components/SwitchTheme.tsx'; +import { getSiteConfig } from '@/lib/config'; interface Props { seo?: Seo } const { seo } = Astro.props; +const config = getSiteConfig(); --- @@ -22,6 +24,8 @@ const { seo } = Astro.props;