diff --git a/.github/workflows/deploy-backoffice.yml b/.github/workflows/deploy-backoffice.yml new file mode 100644 index 0000000..4c2f433 --- /dev/null +++ b/.github/workflows/deploy-backoffice.yml @@ -0,0 +1,35 @@ +name: Deploy Backoffice + +on: + push: + branches: + - develop + paths: + - 'apps/backoffice/**' # INI BASED ON PATH CHANGES JADI NTAR KALAU ADA PUSH DIISNI OTOMATIS DEPLOY + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + port: ${{ secrets.SSH_PORT }} + script: | + set -e + if [ ! -d ~/imphnen-frontend-service-backoffice ]; then + git clone https://github.com/IMPHNEN/imphnen-frontend-service.git ~/imphnen-frontend-service-backoffice + else + cd ~/imphnen-frontend-service-backoffice && git pull + fi + echo "VITE_API_URL=${{ secrets.VITE_API_URL }}" > ~/imphnen-frontend-service-backoffice/apps/backoffice/.env + docker compose -f ~/imphnen-frontend-service-backoffice/docker-compose-backoffice.yml down || true + docker compose -f ~/imphnen-frontend-service-backoffice/docker-compose-backoffice.yml build + docker compose -f ~/imphnen-frontend-service-backoffice/docker-compose-backoffice.yml up -d + docker image prune -af diff --git a/.github/workflows/deploy-dimentorin.yml b/.github/workflows/deploy-dimentorin.yml new file mode 100644 index 0000000..543f990 --- /dev/null +++ b/.github/workflows/deploy-dimentorin.yml @@ -0,0 +1,35 @@ +name: Deploy Dimentorin + +on: + push: + branches: + - develop + paths: + - 'apps/dimentorin/**' # INI BASED ON PATH CHANGES JADI NTAR KALAU ADA PUSH DIISNI OTOMATIS DEPLOY + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + port: ${{ secrets.SSH_PORT }} + script: | + set -e + if [ ! -d ~/imphnen-frontend-service-dimentorin ]; then + git clone https://github.com/IMPHNEN/imphnen-frontend-service.git ~/imphnen-frontend-service-dimentorin + else + cd ~/imphnen-frontend-service-dimentorin && git pull + fi + echo "VITE_API_URL=${{ secrets.VITE_API_URL }}" > ~/imphnen-frontend-service-dimentorin/apps/dimentorin/.env + docker compose -f ~/imphnen-frontend-service-dimentorin/docker-compose-dimentorin.yml down || true + docker compose -f ~/imphnen-frontend-service-dimentorin/docker-compose-dimentorin.yml build + docker compose -f ~/imphnen-frontend-service-dimentorin/docker-compose-dimentorin.yml up -d + docker image prune -af diff --git a/.github/workflows/deploy-gacha.yml b/.github/workflows/deploy-gacha.yml new file mode 100644 index 0000000..86c347d --- /dev/null +++ b/.github/workflows/deploy-gacha.yml @@ -0,0 +1,35 @@ +name: Deploy Gacha + +on: + push: + branches: + - develop + paths: + - 'apps/gacha/**' # INI BASED ON PATH CHANGES JADI NTAR KALAU ADA PUSH DIISNI OTOMATIS DEPLOY + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + port: ${{ secrets.SSH_PORT }} + script: | + set -e + if [ ! -d ~/imphnen-frontend-service-gacha ]; then + git clone https://github.com/IMPHNEN/imphnen-frontend-service.git ~/imphnen-frontend-service-gacha + else + cd ~/imphnen-frontend-service-gacha && git pull + fi + echo "VITE_API_URL=${{ secrets.VITE_API_URL }}" > ~/imphnen-frontend-service-gacha/apps/gacha/.env + docker compose -f ~/imphnen-frontend-service-gacha/docker-compose-gacha.yml down || true + docker compose -f ~/imphnen-frontend-service-gacha/docker-compose-gacha.yml build + docker compose -f ~/imphnen-frontend-service-gacha/docker-compose-gacha.yml up -d + docker image prune -af diff --git a/.github/workflows/deploy-landing.yml b/.github/workflows/deploy-landing.yml index ce85078..89cd15a 100644 --- a/.github/workflows/deploy-landing.yml +++ b/.github/workflows/deploy-landing.yml @@ -2,6 +2,8 @@ name: Deploy Landing on: push: + branches: + - develop paths: - 'apps/landing/**' # INI BASED ON PATH CHANGES JADI NTAR KALAU ADA PUSH DIISNI OTOMATIS DEPLOY diff --git a/apps/dimentorin/public/image/59de8a682dfbe42455613ea07477ff3e30532c1f.webp b/apps/dimentorin/public/image/59de8a682dfbe42455613ea07477ff3e30532c1f.webp new file mode 100644 index 0000000..ad2aa3a Binary files /dev/null and b/apps/dimentorin/public/image/59de8a682dfbe42455613ea07477ff3e30532c1f.webp differ diff --git a/apps/dimentorin/public/image/anime-girl.png b/apps/dimentorin/public/image/anime-girl.png new file mode 100644 index 0000000..8f0dc9d Binary files /dev/null and b/apps/dimentorin/public/image/anime-girl.png differ diff --git a/apps/dimentorin/public/image/anime-girl.webp b/apps/dimentorin/public/image/anime-girl.webp new file mode 100644 index 0000000..14d111c Binary files /dev/null and b/apps/dimentorin/public/image/anime-girl.webp differ diff --git a/apps/dimentorin/public/image/code-article.webp b/apps/dimentorin/public/image/code-article.webp new file mode 100644 index 0000000..74731c8 Binary files /dev/null and b/apps/dimentorin/public/image/code-article.webp differ diff --git a/apps/dimentorin/public/image/mentoring-banner.webp b/apps/dimentorin/public/image/mentoring-banner.webp new file mode 100644 index 0000000..6bebc1e Binary files /dev/null and b/apps/dimentorin/public/image/mentoring-banner.webp differ diff --git a/apps/dimentorin/public/image/payment/bca.webp b/apps/dimentorin/public/image/payment/bca.webp new file mode 100644 index 0000000..4497662 Binary files /dev/null and b/apps/dimentorin/public/image/payment/bca.webp differ diff --git a/apps/dimentorin/public/image/payment/qris.webp b/apps/dimentorin/public/image/payment/qris.webp new file mode 100644 index 0000000..8eb3c4f Binary files /dev/null and b/apps/dimentorin/public/image/payment/qris.webp differ diff --git a/apps/dimentorin/public/image/sample-qrcode.webp b/apps/dimentorin/public/image/sample-qrcode.webp new file mode 100644 index 0000000..2fc66e6 Binary files /dev/null and b/apps/dimentorin/public/image/sample-qrcode.webp differ diff --git a/apps/dimentorin/public/image/work-with-us/exposure.webp b/apps/dimentorin/public/image/work-with-us/exposure.webp new file mode 100644 index 0000000..8964d9e Binary files /dev/null and b/apps/dimentorin/public/image/work-with-us/exposure.webp differ diff --git a/apps/dimentorin/public/image/work-with-us/handshake.webp b/apps/dimentorin/public/image/work-with-us/handshake.webp new file mode 100644 index 0000000..b15f5d7 Binary files /dev/null and b/apps/dimentorin/public/image/work-with-us/handshake.webp differ diff --git a/apps/dimentorin/public/image/work-with-us/networking.webp b/apps/dimentorin/public/image/work-with-us/networking.webp new file mode 100644 index 0000000..452f7cc Binary files /dev/null and b/apps/dimentorin/public/image/work-with-us/networking.webp differ diff --git a/apps/dimentorin/src/app/(public)/(home)/_components/hero-section.tsx b/apps/dimentorin/src/app/(public)/(home)/_components/hero-section.tsx index 06437ee..7721db0 100644 --- a/apps/dimentorin/src/app/(public)/(home)/_components/hero-section.tsx +++ b/apps/dimentorin/src/app/(public)/(home)/_components/hero-section.tsx @@ -3,7 +3,7 @@ import { motion } from 'framer-motion' export function HeroSection() { return ( -
+
{/* Background gradients and shapes */}
{ else setShow(true) }) + const isActive = useMemo(() => { + return (path: string) => { + if (path === '/' && location.pathname !== '/') return false + return location.pathname.includes(path) + } + }, [location.pathname]); + return ( -
+
{ variant="text" className={cn( "px-10 py-1.5 text-neutral-300 hover:text-neutral-400 lg:px-2.5 lg:py-2", - location.pathname === menu.href && "text-primary-500 hover:text-primary-500" + isActive(menu.href) && "text-primary-500 hover:text-primary-500" )} > - {menu.label} + {menu.label} )} - + + +
- + + + + +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

+

+ Writer’s Name +

+

+ 14 March 2025 +

+
+ 5 min read +
+
+
+ +
+
+ Cover Article +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+ + Code + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. Maecenas vitae mattis tellus. Nullam quis imperdiet augue. Vestibulum auctor ornare leo, non suscipit magna interdum eu. Curabitur pellentesque nibh nibh, at maximus ante fermentum sit amet. Pellentesque commodo lacus at sodales sodales. Quisque sagittis orci ut diam condimentum, vel euismod erat placerat. In iaculis arcu eros, eget tempus orci facilisis id. +

+
+
+ + + ) +} diff --git a/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx b/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx new file mode 100644 index 0000000..6df135e --- /dev/null +++ b/apps/dimentorin/src/app/(public)/articles/_components/card/article.tsx @@ -0,0 +1,74 @@ +import { Button } from "@imphnen-frontend-service/ui/atoms" +import { cn, Show } from "@imphnen-frontend-service/utils" +import { FC } from "react" +import { Link } from "react-router-dom" + +export type ArticleCardProps = { + variant?: "default" | "recent" | "featured" +} + +export const ArticleCard: FC = ({ variant = 'default' }) => { + return ( +
+
+ Cover's Article +
+ +
+
+ 5 min read +
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. + + +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut et massa mi. Aliquam in hendrerit urna. Pellentesque sit amet sapien fringilla, mattis ligula consectetur, ultrices mauris. +

+
+
+

Writer’s Name

+

14 March 2025

+
+ + + + +
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/articles/page.tsx b/apps/dimentorin/src/app/(public)/articles/page.tsx new file mode 100644 index 0000000..51c09ec --- /dev/null +++ b/apps/dimentorin/src/app/(public)/articles/page.tsx @@ -0,0 +1,122 @@ +import { ReactElement, useRef, useState } from "react"; +import { ArticleCard } from "./_components/card/article"; +import { cn, For } from "@imphnen-frontend-service/utils"; +import { Button } from "@imphnen-frontend-service/ui/atoms"; +import { motion, useInView, Variants } from "framer-motion"; + +const CATEGORIES = ['UI/UX Design', 'Software/Web Dev', 'Data & AI', 'Cloud & DevOps', 'Cybersecurity', 'IT & Network', 'Project Management', 'QA & Testing'] as const +type Category = typeof CATEGORIES[number] + +export default function Components(): ReactElement { + const [activeTab, setActiveTab] = useState('UI/UX Design') + + const ref = useRef(null) + const isInView = useInView(ref, { once: true, amount: 0.2 }) + + const containerVariants: Variants = { + hidden: { opacity: 0 }, + visible: { + opacity: 1, + transition: { + staggerChildren: 0.1, + delayChildren: 0.2, + }, + }, + } + + const childVariants: Variants = { + hidden: { opacity: 0, y: 20 }, + visible: { + opacity: 1, + y: 0, + transition: { + duration: 0.4, + ease: [0.25, 0.46, 0.45, 0.94], + }, + }, + } + + return ( +
+ +
+ + Featuring Articles + + +
+ + + + +
+ + Recent Articles + +
+ + {(_, index) => ( + + + + )} + +
+
+
+
+ +
+ + Category + +
+ + + {(category) => ( + + )} + + +
+ +
+ + {(_, index) => ( + + + + )} + +
+
+
+
+ ) +} diff --git a/apps/dimentorin/src/app/(public)/layout.tsx b/apps/dimentorin/src/app/(public)/layout.tsx index d9ffaf8..5e12f2a 100644 --- a/apps/dimentorin/src/app/(public)/layout.tsx +++ b/apps/dimentorin/src/app/(public)/layout.tsx @@ -6,7 +6,7 @@ export default function Layout() { return (
-
+