├── src ├── types │ └── module.d.ts ├── images │ └── logo.png ├── lib │ └── config.ts ├── components │ ├── index.ts │ ├── Footer │ │ └── index.tsx │ ├── Layout │ │ └── index.tsx │ ├── Header │ │ └── index.tsx │ ├── AnimateIn │ │ └── index.tsx │ ├── Preloader │ │ └── index.tsx │ ├── ScrollTop │ │ └── index.tsx │ ├── VideoCard │ │ └── index.tsx │ └── Meta │ │ └── index.tsx ├── utils │ └── consts.ts ├── hooks │ └── useSiteMetadata.ts ├── pages │ ├── 404.tsx │ └── index.tsx └── styles │ ├── global.css │ └── photofolio.css ├── .env.example ├── screenshot.png ├── .github ├── screnshot.png ├── workflows │ ├── commitlint.yml │ ├── screenshot.yml │ └── gatsby.yml ├── PULL_REQUEST_TEMPLATE.md ├── CODE_OF_CONDUCT.md └── CONTRIBUTING.md ├── .husky ├── pre-commit └── commit-msg ├── .gitignore ├── gatsby-ssr.tsx ├── renovate.json ├── gatsby-browser.tsx ├── gatsby-meta.ts ├── LICENSE ├── package.json ├── gatsby-config.ts ├── README.md └── tsconfig.json /src/types/module.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.png"; 2 | declare module "*.jpg"; 3 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | GA_TRACKING_ID= 2 | CONTENTFUL_SPACE_ID= 3 | CONTENTFUL_ACCESS_TOKEN= -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/natainditama/aadc-bambu/HEAD/screenshot.png -------------------------------------------------------------------------------- /src/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/natainditama/aadc-bambu/HEAD/src/images/logo.png -------------------------------------------------------------------------------- /.github/screnshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/natainditama/aadc-bambu/HEAD/.github/screnshot.png -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | yarn lint-staged 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .cache/ 3 | public 4 | src/gatsby-types.d.ts 5 | .env.* 6 | !.env.example 7 | -------------------------------------------------------------------------------- /src/lib/config.ts: -------------------------------------------------------------------------------- 1 | export const config = { 2 | YOUTUBE_CHANNEL_ID: "UCVVQiuzOR_MlSOax9KPnuIA", 3 | }; 4 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx --no -- commitlint --edit ${1} 5 | -------------------------------------------------------------------------------- /gatsby-ssr.tsx: -------------------------------------------------------------------------------- 1 | import meta from "./gatsby-meta"; 2 | 3 | export const onRenderBody = ({ setHtmlAttributes }) => { 4 | setHtmlAttributes({ lang: meta.lang }); 5 | }; 6 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./AnimateIn"; 2 | export * from "./Layout"; 3 | export * from "./Footer"; 4 | export * from "./Header"; 5 | export * from "./Meta"; 6 | export * from "./Preloader"; 7 | export * from "./ScrollTop"; 8 | export * from "./VideoCard"; 9 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:base"], 4 | "labels": ["dependencies"], 5 | "prCreation": "not-pending", 6 | "semanticCommits": "enabled", 7 | "automerge": true 8 | } 9 | 10 | -------------------------------------------------------------------------------- /.github/workflows/commitlint.yml: -------------------------------------------------------------------------------- 1 | name: Lint Commit Messages 2 | on: [pull_request] 3 | 4 | permissions: 5 | contents: read 6 | pull-requests: read 7 | 8 | jobs: 9 | commitlint: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v4 15 | 16 | - name: Check commitlint 17 | uses: wagoid/commitlint-github-action@v6 18 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 🔄 Type of Changes 2 | Please indicate the type of changes made in this pull request by putting an 'x' in the relevant checkboxes: 3 | 4 | - [ ] Bug fix 5 | - [ ] New feature 6 | - [ ] Documentation update 7 | - [ ] Code refactoring 8 | - [ ] Performance improvement 9 | 10 | ## ✅ Checklist 11 | Please review and check the following items before submitting the pull request: 12 | 13 | - [ ] Code follows project's style and conventions. 14 | - [ ] Existing tests pass successfully. -------------------------------------------------------------------------------- /gatsby-browser.tsx: -------------------------------------------------------------------------------- 1 | import "bootstrap/dist/css/bootstrap.min.css"; 2 | import "bootstrap/dist/js/bootstrap.min"; 3 | import "bootstrap-icons/font/bootstrap-icons.min.css"; 4 | import "@fontsource/inter"; 5 | import "./src/styles/photofolio.css"; 6 | import "./src/styles/global.css"; 7 | import { Layout } from "./src/components"; 8 | import * as React from "react"; 9 | import type { GatsbyBrowser } from "gatsby"; 10 | 11 | export const wrapPageElement: GatsbyBrowser["wrapPageElement"] = ({ element }) => { 12 | return {element}; 13 | }; 14 | -------------------------------------------------------------------------------- /src/utils/consts.ts: -------------------------------------------------------------------------------- 1 | export interface Social { 2 | name: string; 3 | color?: string; 4 | url: string; 5 | } 6 | 7 | export const socialLinks: Array = [ 8 | { 9 | name: "facebook", 10 | color: "#1877F2", 11 | url: "https://www.facebook.com/igusti.murniati.1", 12 | }, 13 | { 14 | name: "instagram", 15 | color: "#E4405F", 16 | url: "https://www.instagram.com/ayunibambu0404/", 17 | }, 18 | { 19 | name: "tiktok", 20 | color: "#000000", 21 | url: "https://www.tiktok.com/@aadcbambu", 22 | }, 23 | { 24 | name: "github", 25 | color: "#181717", 26 | url: "https://github.com/natainditama/aadc-bambu", 27 | }, 28 | ]; 29 | -------------------------------------------------------------------------------- /src/hooks/useSiteMetadata.ts: -------------------------------------------------------------------------------- 1 | import { useStaticQuery, graphql } from "gatsby"; 2 | 3 | interface SiteMetaData { 4 | site: { 5 | siteMetadata: Queries.SiteSiteMetadata; 6 | }; 7 | } 8 | 9 | const useSiteMetadata = () => { 10 | const { site } = useStaticQuery(graphql` 11 | query SiteMetadata { 12 | site { 13 | siteMetadata { 14 | title 15 | description 16 | titleTemplate 17 | author 18 | siteUrl 19 | image 20 | lang 21 | } 22 | } 23 | } 24 | `); 25 | return site.siteMetadata; 26 | }; 27 | 28 | export type UseSiteMetaDataReturnType = ReturnType; 29 | 30 | export default useSiteMetadata; 31 | -------------------------------------------------------------------------------- /src/components/Footer/index.tsx: -------------------------------------------------------------------------------- 1 | import useSiteMetadata from "@/hooks/useSiteMetadata"; 2 | import React from "react"; 3 | 4 | export function Footer() { 5 | const { title } = useSiteMetadata(); 6 | 7 | return ( 8 |
9 |
10 |
11 | Copyright ©{new Date().getFullYear()} {title?.replace(" ", "")}. All Rights Reserved. 12 |
13 |
14 | Designed by{" "} 15 | 16 | BootstrapMade 17 | 18 |
19 |
20 |
21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /src/components/Layout/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { PropsWithChildren, useEffect } from "react"; 2 | import { Footer, Header, Preloader, ScrollTop } from "@/components"; 3 | import gsap from "gsap"; 4 | import ScrollTrigger from "gsap/dist/ScrollTrigger"; 5 | import ReactLenis from "@studio-freight/react-lenis"; 6 | 7 | gsap.registerPlugin(ScrollTrigger); 8 | 9 | export function Layout({ children }: PropsWithChildren) { 10 | useEffect(() => { 11 | return () => { 12 | ScrollTrigger.getAll().forEach((trigger) => trigger.kill()); 13 | }; 14 | }, []); 15 | 16 | return ( 17 | <> 18 | 19 |
20 | 21 |
{children}
22 |
23 |