* Initialize a new NX project - QR campaign
* Develop QR code generator app for campaign
* Add deployment script
Add Dockerfile, docker compose, and update Nix config for deployment
* Revert package.json to fix ci
* Revert package-lock.json to ensure ci (Nix build & cache) successful
Add clickable "Powered By Ancikri" badge beside the community badge
with matching pill design, linking to ancikri.com
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Build all packages (landing, backoffice, gacha, dimentorin, hackathon, infra)
- Push to msdqn Cachix cache
- Server can pull pre-built packages from Cachix
Requires CACHIX_AUTH_TOKEN secret in GitHub repository settings.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Upgrade Next.js from 16.0.8 to 16.0.10 to fix critical RCE
vulnerability (CVSS 10.0) in React Server Components.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add fallback check to continue if build output exists even when
Nx crashes after successful build completion.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add --jitless Node.js flag to work around V8 JIT compilation
memory allocation issues on the server.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fix wrapper script to use explicit Nix bash path instead of
/usr/bin/env bash which doesn't work on NixOS.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Download Poppins and Bai Jamjuree font files locally
- Convert from next/font/google to next/font/local
- Enables builds in sandboxed environments without network access
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add __noChroot=true to enable network access for next/font/google
to fetch Poppins and Bai_Jamjuree fonts during the Next.js build.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Call Nx directly with --output-style=static flag instead of through
npm scripts to completely bypass the pseudo terminal initialization
that crashes in non-TTY environments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add NX_TASKS_RUNNER_DYNAMIC_OUTPUT=false and NX_NATIVE=false
to completely disable Nx's Rust-based terminal handling that
crashes in non-TTY build environments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added CI=true, NO_COLOR=1, TERM=dumb, and NX_SKIP_NX_CACHE=true
to both mkViteApp.nix and landing.nix to prevent the vt100-rust
panic during Nix builds.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add flake.nix with packages for all 5 apps (landing, gacha, backoffice, dimentorin, hackathon)
- Add NixOS modules for deployment (systemd service for Next.js, nginx for Vite apps)
- Add mkHackathonWithEnv function for build-time environment variables
- Add development shell with Node.js 22, npm, bun
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed certificate background from PNG to SVG for better quality
- Added Poppins font import to index.html
- Updated certificate layout with Team Name and Person Name in blue (#59bef5)
- Repositioned QR code to fit in designated white box placeholder
- Removed generated copyright and date overlays (now part of SVG template)
- Adjusted text positioning for better alignment with new design
- Increased canvas scale to 4x and wait time to 1500ms for sharper rendering
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added isTeamMember check (session user ID === certificate user ID)
- Hide all action buttons (Download, Print, View Submission) for non-members
- Hide "Back to Submission" button in header for non-members
- Unauthenticated users and other users can view certificate but cannot interact with buttons
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated certificate page to use useCertificatePublicData hook
- Removed old multi-API-call approach
- Now uses single /certificates/{userId} endpoint
- Simplified data fetching for user, team, submission data
- Certificate now works for unauthenticated users
- Removed duplicate certificate hook file
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add new useCertificatePublicData hook to fetch certificate data from public endpoint without authentication. This hook combines user, team, submission, and winner data in a single request.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated API error interceptor to skip redirect on certificate pages
- Prevents 401 errors from redirecting to login on public certificate pages
- Certificate pages can now be viewed without authentication
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Modified encodeCertificateId to include userId parameter
- Updated decodeCertificateId to extract and return userId
- Added backward compatibility for old 2-part certificate IDs
- Certificate page now fetches and displays certificate owner's name
- Submission page passes current user's ID when generating certificate
- Fixed certificate template to use certificate owner's name instead of team leader
- Certificates now show the encoded user's name regardless of who views them
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add /certificate/* to public routes in root layout
- Display team leader name instead of current user
- Remove authentication requirement for viewing certificates
- Certificates now work without login
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use encodeURIComponent to properly encode certId
- Fixes QR code URLs with special characters like /, +, =
- QR codes now generate with properly encoded URLs (%2F, %2B, %3D)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: adjust landing page
- change typo text in footer "patners" -> "partnerts"
- add github in community section, and footer
- update the value of stat members in hero and cta section
* chore: adjust landing page
- fix logo github in community section
* feat(backoffice): create a boilerplate page for Hackathon dashboard
- Create an empty page for Hackathon dashboard
- Comment out and hide the existing backoffice sidebar
* feat(backoffice): Create a nested/dropdown sidebar list
- Create a dropdown sidebar list
- Show back the old navigation and group them
- Make the sidebar responsive for mobile view
* test datatable with mock data
* base UI for Hackathon backoffice
TODO:
- Organize table schema for users, teams, and submissions management
- Create API Contract for additional back-end endpoint
* feat(hackathon): draft data table column & API Contract
* update endpoint
* feat(backoffice): update page hackathon user management
- update data table component
- update filtering & pagination
- add modal display to edit and add user
- hide notification icon in backoffice wrapper
* feat(backoffice): add API contract for hackathon users
* feat(backoffice): little adjustment in hackathon users management UI and API contract
* feat(backoffice): update hackathon team management page
- add modal for manage team, add new team, and view project submission
- reorganize the table column and data table
* feat(backoffice): add searchable city filter
- add component for city filter
- apply to user management and team management pages
* feat(backoffice): improve hackathon team modal UI and add API contract
- Add feature to select city in team detail modal using CityFilterSelect component
- Add feature to change team logo and banner
- Add API contract documentation for hackathon teams in backoffice
* feat(backoffice): authentication middleware, error pages, and 404 page
* feat(backoffice): hackathon dashboard integration
* feat(backoffice): users page integration
- Get users data from API
- Set up server-side pagination and match URL params
- Hide filter that doesn't exist in back-end
* feat(backoffice): teams page integration
- Get teams data from API
- Hide filter that doesn't exists in back-end
- Simplify modal according to the back-end
* feat(backoffice): submission page integration
- Fetch submissions data from API
- Move submission modal to hackathon-submissions page
- change typo text in footer "patners" -> "partnerts"
- add github in community section, and footer
- update the value of stat members in hero and cta section
- Add helper text indicating users can paste demo video links
- Update placeholder to mention YouTube, Loom, etc.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Display countdown timer on dashboard showing days, hours, minutes, seconds
- Shows time remaining until December 7, 2025 23:59 WIB
- Automatically hides after deadline passes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat(backoffice): create a boilerplate page for Hackathon dashboard
- Create an empty page for Hackathon dashboard
- Comment out and hide the existing backoffice sidebar
* feat(backoffice): Create a nested/dropdown sidebar list
- Create a dropdown sidebar list
- Show back the old navigation and group them
- Make the sidebar responsive for mobile view
* test datatable with mock data
* base UI for Hackathon backoffice
TODO:
- Organize table schema for users, teams, and submissions management
- Create API Contract for additional back-end endpoint
* feat(hackathon): draft data table column & API Contract
* update endpoint
* feat(backoffice): update page hackathon user management
- update data table component
- update filtering & pagination
- add modal display to edit and add user
- hide notification icon in backoffice wrapper
* feat(backoffice): add API contract for hackathon users
* feat(backoffice): little adjustment in hackathon users management UI and API contract
- useMyTeams and useTeamsByUserId now unwrap {team: {...}} structure
- Simplified dashboard and user profile components
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- User can only have one team, no need for list/grid
- Display team card full width with larger styling
- Bigger logo, title, and description area
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add fallback banner image
- Add fallback logo placeholder
- Use member_count for member display
- Add submission badge
- Improve card layout consistency with other pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Use member_count instead of members.length for member count
- Use singular "Team" when user has only 1 team
- Add fallback banner image
- Add fallback logo placeholder
- Add submission badge
- Improve card layout and styling
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add min_members and max_members params to useTeams hook
- Add member filter dropdown with options: All, Looking for Members (1-4), 1-5 members
- Filter persists in URL query params
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Match ListResponse structure: data (array) + meta (pagination)
- Use correct query param name: per_page instead of limit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace infinite scroll with traditional numbered pagination
- Add page numbers, prev/next buttons
- Show "Showing X-Y of Z teams" count
- Auto-reset to page 1 on search/filter changes
- Update useTeams hook to return pagination metadata
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Show warning on browse page for teams with only 1 member
- Show warning on team detail page for single-member teams
- Helps users understand they need 2+ members to submit
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Hide "Request to Join" button on browse page for submitted teams
- Hide "Invite Member" and "Join Requests" buttons on team detail for submitted teams
- Change "Submit Project" to "View Submission" for submitted teams
- Rename "Manage Members" to "View Members"
- Hide "Delete Team" for submitted teams
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added useEffect to detect access_token in URL hash/query params on
login page. When Supabase redirects password reset emails to /auth/login
instead of /auth/callback, the page now automatically redirects to
/auth/reset-password with the token.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Leave Team button in Quick Actions section for non-leader members
- Add confirmation modal before leaving with warning message
- Use existing useLeaveTeam hook from service library
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix browse teams page to use member_count from API response
- Add member_count field to TTeamItem type
- Add minimum team members requirement (2) for project submission
- Add type-to-confirm verification before final submission
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add email activation requirement for signup (no auto-login)
- Add form validation with React Hook Form and Zod on signup page
- Update callback page to handle email confirmation and password reset redirects
- Fix token format in API interceptor (use access_token)
- Fix middleware to use SessionToken for auth check
- Add infinite scroll with IntersectionObserver on browse teams page
- Replace all internal <a href> with <Link> components
- Add useInfiniteTeams hook for paginated team browsing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Redirect unauthenticated users to /auth/login instead of /maintenance
- Allow all /auth/* routes for unauthenticated access
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove Supabase export from service library
- Update forgot-password and reset-password pages to use backend API
- Update layout.tsx to use useAuthStore instead of Supabase session
- Update sidebar logout to not use Supabase
- Update middleware to use SessionUser instead of Supabase
- Update use-session hook to remove Supabase dependency
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: update landing page
* feat: Add favicon and SEO (JSON-LD schema, meta tags)
- Add favicon image
- Add JSON-LD schema for Hackathon event
- Add react-helmet-async for managing meta tags
* chore: remove react-helmet-async
* chore: update landing page
* chore: update UI for signup and login
- add back button for better UX
* feat: add image loading state and skeleton UI for team dashboard
* fix: landing navbar not sticky to top, fix onboarding UI
* feat(hackathon): update UI
- Update dashboard, onboarding user, edit profile, and team layout
to make it more consistent
* fix: optimize placeholder banner image & minor fix dark mode
* feat(hackathon): update landing page dark mode color scheme
* feat(hackathon): update auth page dark mode color scheme
* feat(hackathon): dashboard UI improvement and dark mode adjustment
* feat(hackathon): browse team page
- update dark mode color scheme
- add some border style to give outline and depth
- change emoji to icon
* feat(hackathon): update team page
- update dark mode color scheme for team page: view, team edit,
and submit project page
- fix bug in chat where messages are displayed double
- make the form field size consistent
* feat(hackathon): update dark mode onboarding and edit profile
* feat(hackathon): change "edit profile" to modal dialog
- Add "edit profile" modal dialog that can be triggered from dashboard
- Update background overlay for dark mode
- Update dark mode for auth callback
* feat(hackathon): dark mode for user page
---------
Co-authored-by: Maulana Sodiqin <sodiqincahyana1@gmail.com>
Co-authored-by: Muhammad Zakir Ramadhan <61570975+zakirkun@users.noreply.github.com>
* feat: update landing page
* feat: Add favicon and SEO (JSON-LD schema, meta tags)
- Add favicon image
- Add JSON-LD schema for Hackathon event
- Add react-helmet-async for managing meta tags
* chore: remove react-helmet-async
* chore: update landing page
* chore: update UI for signup and login
- add back button for better UX
* feat: add image loading state and skeleton UI for team dashboard
* fix: landing navbar not sticky to top, fix onboarding UI
* feat(hackathon): update UI
- Update dashboard, onboarding user, edit profile, and team layout
to make it more consistent
* fix: optimize placeholder banner image & minor fix dark mode
* feat(hackathon): update landing page dark mode color scheme
* feat(hackathon): update auth page dark mode color scheme
* feat(hackathon): dashboard UI improvement and dark mode adjustment
* feat(hackathon): browse team page
- update dark mode color scheme
- add some border style to give outline and depth
- change emoji to icon
* feat(hackathon): update team page
- update dark mode color scheme for team page: view, team edit,
and submit project page
- fix bug in chat where messages are displayed double
- make the form field size consistent
* feat(hackathon): update dark mode onboarding and edit profile
---------
Co-authored-by: Maulana Sodiqin <sodiqincahyana1@gmail.com>
Co-authored-by: Muhammad Zakir Ramadhan <61570975+zakirkun@users.noreply.github.com>
- Add line-clamp-3 to limit bio to 3 lines
- Add wrap-break-word to handle long strings without spaces
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add totalImagesToLoad, handleImageLoad, handleImageError
- Disable image loading overlay to prevent blocking UI
- Fix ReferenceError: totalImagesToLoad is not defined
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: update landing page
* feat: Add favicon and SEO (JSON-LD schema, meta tags)
- Add favicon image
- Add JSON-LD schema for Hackathon event
- Add react-helmet-async for managing meta tags
* chore: remove react-helmet-async
* chore: update landing page
* chore: update UI for signup and login
- add back button for better UX
* feat: add image loading state and skeleton UI for team dashboard
* fix: landing navbar not sticky to top, fix onboarding UI
* feat(hackathon): update UI
- Update dashboard, onboarding user, edit profile, and team layout
to make it more consistent
* fix: optimize placeholder banner image & minor fix dark mode
---------
Co-authored-by: Maulana Sodiqin <sodiqincahyana1@gmail.com>
Co-authored-by: Muhammad Zakir Ramadhan <61570975+zakirkun@users.noreply.github.com>
- Replace basic select dropdown with CitySelect component
- Consistent with create team and profile pages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove all console.log statements from middleware, layout, and pages
- Replace alert with toast for onboarding error messages
- Delete unused page-original.tsx backup file
- Keep console.error for actual error debugging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add dark mode styling to Input component (bg, text, border, placeholder)
- Add dark mode styling to Textarea component
- Update profile page with blurred backdrop overlay
- Add shadow and proper dark mode to modal container
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Apply rose-pine dark theme across all pages for darker appearance
- Update Button component with dark mode variants
- Replace basic city select with searchable CitySelect on create team page
- Show Dashboard button in navbar when user is authenticated
- Apply dark mode styling to onboarding, team pages, and user profile
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add loading state check before leader validation to prevent race condition
- Fix useRemoveMember hook to use Supabase directly instead of missing API endpoint
- Leader check now waits for team data to load before showing Access Denied
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add ThemeProvider with system/light/dark mode support and localStorage persistence
- Add ThemeToggle component for pages without sidebar (landing, login, signup)
- Enable class-based dark mode in Tailwind CSS v4 via @custom-variant
- Add dark mode classes to landing page, login, signup, and all dashboard pages
- Keep IMPHNEN logo blue in dark mode, invert Kolosal logo
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add isMember check to only show Quick Actions to team members
- Hide submission status from non-members
- Non-members can only view team info, leader, and member list
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update teams/[teamId]/layout.tsx to use Sidebar component
- Update users/[userId]/layout.tsx to use Sidebar component
- Now matches dashboard layout with sidebar navigation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set consistent h-[42px] height for both search and city filter inputs
- Add 300ms debounce to search to reduce API calls while typing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace browse teams city dropdown with searchable CitySelect component
- Remove "Back to Dashboard" button from team detail page (uses sidebar nav)
- Add cities constant to service library for validation
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add .eq('status', 'pending') filter to useTeamJoinRequests hook
- Add toast notifications for approve/reject actions on members page
- Parse Supabase error messages to show user-friendly error text
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enhance team browsing with member count and view team option
* feat: add default banner image for teams without a custom banner
* feat: implement user profile page and user layout component
* feat: improve browse team filtering layout
* feat: limit join request button visibility based on team member count
* feat: enhance user profile and team dashboard layouts for improved responsiveness
* feat: add location, bio, and skills fields to user profile schema and form
* feat: enhance team display and user information layout for better readability
* feat: update join request button visibility logic based on user team membership
* feat: enhance team and user profile layouts with improved text truncation and responsiveness
Previously approved/rejected requests were still showing in the list.
Now only pending requests are displayed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Removed permission checking logic that was causing "Cannot read properties
of null (reading 'name')" error.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add NX_DAEMON=false to all Dockerfiles to prevent slow daemon startup
- Add --env-file flag to hackathon build for proper env var substitution
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added --progress=plain to show live build output
- Enabled DOCKER_BUILDKIT=1 for better build performance
- Now you can see what's actually happening instead of appearing stuck
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added concurrency group 'deploy-vps' to all deployment workflows
- Prevents multiple deployments from running simultaneously on VPS
- Deployments now queue and run one at a time
- Fixes resource exhaustion when all apps deploy at once
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added command_timeout: 30m to all SSH deployment workflows
- Prevents timeout issues during Docker builds
- Applies to landing, hackathon, gacha, dimentorin, and backoffice
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Changed from apps/hackathon/.env to root .env.local
- Docker-compose expects .env.local in root directory
- This ensures Supabase env variables are properly loaded during build
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created CitySelect component with real-time filtering
- Supports 516 Indonesian cities with array filtering
- Added search functionality for better UX
- Integrated with react-hook-form in user onboarding
- Includes clear button and auto-close on outside click
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated all deployment workflows to create .env files with Supabase credentials
- Added VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY for Vite apps
- Added NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY for Next.js landing app
- Changed from single-line echo to multi-line cat heredoc for better .env management
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add git reset --hard before pull to discard any local changes on server:
- Fetch latest changes from origin
- Reset to origin/develop to discard local modifications
- Then pull to update
This fixes deployment failures caused by uncommitted local changes on the server.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove automatic redirect from "/" to login/dashboard
- Allow everyone to view the hackathon landing page
- Users can still click "Daftar Sekarang" to go to login
This fixes the issue where the landing page immediately redirected to login.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replace npm install with npm ci and optimization flags to fix deployment timeouts:
- Use npm ci for faster, more reliable installs
- Add --prefer-offline to use cached packages
- Add --no-audit and --no-fund to skip unnecessary checks
- Optimize landing.Dockerfile to copy package files before installing
This resolves the Docker build EOF errors during deployment.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Triggering deployment for all apps to deploy the following changes:
- Fixed circular dependency between utils and service libraries
- Added missing auth hooks (usePostVerifyEmail, useGoogleCallback, etc.)
- Moved useAuthStore from utils to service
- All apps now build successfully
Apps to deploy:
- hackathon
- gacha
- dimentorin
- backoffice
- landing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added missing React Query hooks that were being imported but not exported:
- usePostLogin
- usePostRegister
- usePostVerifyEmail
- usePostSendOtp
- useGoogleCallback
These hooks wrap the existing auth API functions with React Query's useMutation.
Fixes build errors:
- gacha:build - "usePostVerifyEmail" is not exported
- dimentorin:build - "useGoogleCallback" is not exported
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Moved useAuthStore from utils to service to break circular dependency:
- utils was importing from service (supabase client, types)
- service was importing from utils (useAuthStore)
- Solution: moved useAuthStore and related storage utilities to service
Changes:
- Created libs/service/src/storage/ with cookies.ts and local-storage.ts
- Moved use-auth-store.ts from utils/hooks to service/hooks/auth
- Updated all 20+ files to import useAuthStore from service instead of utils
- Removed useAuthStore export from utils
- Added storage exports to service index
This fixes the build error: "Could not execute command because the task graph has a circular dependency"
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implemented `getGoogleAuthUrl` and `postGoogleCallback` in auth API.
- Added corresponding hooks `useGoogleAuth` and `useGoogleCallback` for handling Google authentication.
feat(api): enhance API structure with mentors and upload services
- Created `mentors` and `upload` API modules with respective services for managing mentor details and file uploads.
- Added session management utilities to handle authentication tokens in cookies.
feat(users): expand user service with detailed user management
- Enhanced user service to include detailed user information and update capabilities.
- Added hooks for fetching and updating user data.
feat(hooks): introduce hooks for mentors and upload functionalities
- Added hooks for fetching mentor details and updating mentor information.
- Implemented hooks for file upload, avatar upload, and CV upload with validation.
refactor(types): organize and extend type definitions
- Introduced new types for mentors and enhanced existing user types.
- Re-exported user-related types for better accessibility.
chore: update index files to include new services and hooks
- Updated index files to export new services and hooks for mentors and uploads.
* fix: docker
* fix landing
* chore(landing): add outputFileTracingRoot to next config
* ci: add github workflow for landing deployment via ssh and docker compose
* chore: add docker-compose file for landing app build and run
* feat docker
* fix: correct link for Roadmap navigation item
* feat: add feature request and projects voting components
* fix: correct spelling of 'Certificate' in ProjectsVote component
* feat: add Request Feature popup with responsive dialog and drawer components
* feat: enhance Header component with mobile menu animations and improved navigation styling
* refactor: simplify Header component by removing unused scroll handling and improving mobile menu structure
* fix: replace motion span with static span for header underline
* fix: update FeatureRequestCTA text for clarity and adjust page layout margins
* fix: remove DialogDescription from RequestFeaturePopup and update textarea placeholder for clarity
* fix: remove DrawerDescription from RequestFeaturePopup for cleaner UI
* fix: remove unused icon exports from icons
* fix: replace XIcon with LuX in DialogClose for consistency
* fix: remove unused icon export from index for cleaner module structure
* feat: setup openapi libs for landing
* feat: seperate landing layouts
* feat: movee landing providers
* feat: add auth layout
* feat: implement cookie management for access and refresh tokens
* feat: replace Inter font with Bai Jamjuree in layout and add font utility
* feat: add signin
* feat: add Poppins font to the font utility
* feat: expand theme colors in index.css for improved styling options
* feat: update dependencies and enhance button and form components with new variants and context
* feat: move old components to __old__ dir
* feat: add react query support
* feat: hide the footer
* fix: header style
* feat: replace Image component with LogoSimple in Header and update Logo component to accept props
* fix: update label for tutorial stat in hero-stats.json
* feat: implement EventsPage component with event listing and details
* feat: add signup button and page
* feat: add HERO_CONTENT data and integrate into Hero component
* fix: update navigations import to uppercase and add missing Testimoni entry
* feat: implement testimonials display and add submission page
* fix: correct link path for testimonial submission
* feat: add communites component and integrate social links from JSON data
* fix: adjust grid gap in Communities component for better layout
* fix: update font imports in layout components for consistency
* fix: replace text logo with LogoSimple component in Footer and restore Footer in Layout
* feat: add TestimonialSection component and update testimonials data
* fix: update section ID from 'komunitas' to 'community' for consistency
* feat: add CTASection component with interactive elements and background pattern
* fix: update join URL in hero content for consistency
* fix: update text in CTASection for improved emphasis and consistency
* feat: add CommunitySection component and integrate it into the main page
* feat: update Footer component to use dynamic navigation and social links
* feat: implement HeroSection component with dynamic content and animations
* refactor: replace hardcoded testimonials with dynamic data from JSON
* feat: add signup page
* feat: integrate Turnstile captcha verification in signup process
* feat: implement verification page
* feat: add signin link to the signup page
* feat: add "Forgot Password?" link to the signin form
* refactor: clean up unused ThemeProvider code and CSS variables
* feat: add base styles for borders and background to improve UI consistency
* feat: implement forgot password functionality with validation and UI components
* fix: update password validation rules for clarity and consistency
* feat: enable rich colors for Toaster component in layout
* feat: implement reset password functionality with validation and UI components
* feat: implement Turnstile captcha verification for forgot password and signup actions
* refactor: remove console log and enhance error handling in signin and resend OTP actions
* feat: add navigation entries for Roadmap and Artikel sections
* feat: create initial Page component for articles section
* feat: update footer component with additional social media links and icons
* feat: remove all unused components in landing
* chore: add @radix-ui/react-label deps
* feat: wrap VerificationTabs in Suspense
* feat: update .env.example to include TURNSTILE_SECRET_KEY and correct NEXT_PUBLIC_TURNSTILE_SITEKEY
* feat(gacha): register and login integration
* fix: navbar and gacha landing page
- display fullname when user authenticated
- fix styling and responsive
* fix: minor fix UI
* chore: remove all references to PayloadCMS
* fix: nextjs landing utils
* feat: refactor community, features, hero, learning resources, and testimonials components to use external JSON data
* fix:remove hero logo box
* fix: remove unused image in public
* fix: change logo.png to logo.webp
* fix: update button styles for improved visibility
* chore: restructure component organization
* fix: update import path for global styles in layout component
* fix: adjust alignment of hero stats section for better layout
* fix: update testimonials placeholder sample data
* fix: update header component to use router for navigation and add signin page
* feat: integrate payload cms to landing page
* feat: add payload configuration and update TypeScript target
* fix: update TypeScript paths for payload configuration
* refactor: update config import paths to use local payload.config
* fix: update quotation marks for testimonials to use HTML entities
* fix: include withPayload in Next.js plugins for proper configuration
* feat: implement HeroSection global configuration and integrate with Hero component
* feat: add FeaturesSection global configuration and integrate with Features component
* feat: add revalidate constant to control page revalidation interval
* refactor: optimize data fetching by using Promise.all
* fix: update revalidation interval to 10 seconds
* feat: add CommunitiesSection configuration and integrate with Community component
* refactor: move global section functions to services directory
* feat: add support for s3 bucket for media
* feat: update Community component to use Iconify for icons and adjust CommunitiesSection configuration
* feat: replace Link component with Button for improved button styling in Community component
* feat: update FeaturesSection to use Iconify icons and adjust icon properties
* feat: add heroImage field to HeroSection and implement image formatting utility
* feat: add Learning Resources section with dynamic data fetching and UI integration
* feat: enhance LearningResourcesSection with primary and secondary button links
* refactor: reorganize layout structure by moving Header and Footer components to RootLayout
* feat: implement Testimonials section with dynamic data fetching and UI integration
* feat: simplify joinTitle rendering in Testimonials section
* feat: implement CallToAction section with dynamic data fetching and UI integration
* feat: update CallToActionSection label and wrap Discord button in link
* feat: update button components to use onClick for external links and improve styling
* feat: wrap logo image in a link to navigate to the homepage
* fix: supress scss deps warning
* fix: add placeholder to .env.example
* chore: add environment placeholder variables for CMS configuration in test build workflow
* fix: remove unused environment variables from test build workflow
* fix: text color (#26)
* chore: update action
* feat: integrate payload cms to landing page
* feat: add payload configuration and update TypeScript target
* fix: update TypeScript paths for payload configuration
* refactor: update config import paths to use local payload.config
* fix: include withPayload in Next.js plugins for proper configuration
* feat: implement HeroSection global configuration and integrate with Hero component
* feat: add FeaturesSection global configuration and integrate with Features component
* feat: add revalidate constant to control page revalidation interval
* refactor: optimize data fetching by using Promise.all
* fix: update revalidation interval to 10 seconds
* feat: add CommunitiesSection configuration and integrate with Community component
* refactor: move global section functions to services directory
* feat: add support for s3 bucket for media
* feat: update Community component to use Iconify for icons and adjust CommunitiesSection configuration
* feat: replace Link component with Button for improved button styling in Community component
* feat: update FeaturesSection to use Iconify icons and adjust icon properties
* feat: add heroImage field to HeroSection and implement image formatting utility
* feat: add Learning Resources section with dynamic data fetching and UI integration
* feat: enhance LearningResourcesSection with primary and secondary button links
* refactor: reorganize layout structure by moving Header and Footer components to RootLayout
* feat: implement Testimonials section with dynamic data fetching and UI integration
* feat: simplify joinTitle rendering in Testimonials section
* feat: implement CallToAction section with dynamic data fetching and UI integration
* feat: update CallToActionSection label and wrap Discord button in link
* feat: update button components to use onClick for external links and improve styling
* feat: wrap logo image in a link to navigate to the homepage
* fix: supress scss deps warning
* fix: add placeholder to .env.example
* chore: add environment placeholder variables for CMS configuration in test build workflow
* fix: remove unused environment variables from test build workflow
* fix: remove mistakenly added env from test-build workflow
---------
Co-authored-by: Fahim Ardani <fahimardani25@gmail.com>
Co-authored-by: Maulana Sodiqin <53475078+maulanasdqn@users.noreply.github.com>
* feat: integrate payload cms to landing page
* feat: add payload configuration and update TypeScript target
* fix: update TypeScript paths for payload configuration
* refactor: update config import paths to use local payload.config
* fix: update quotation marks for testimonials to use HTML entities
* fix: include withPayload in Next.js plugins for proper configuration
- Pisahkan type dan schema untuk gacha roll item
- Perbaiki validasi gacha roll item
- Parsing angka pada component ControlledInputField
- Update type number untuk component Input dan InputField
- Tambah fitur login dan logout pada Backoffice
- Ubah port development server dan atasi CORS
- Update type login response
- Update component Input agar toggle password berfungsi dengan benar
- Tambah custom hook 'use-query-state' dan implementasi stepper pada modal dengan tahapan lebih dari 1
- Hapus component ModalBackoffice karena sudah menggunakan component umum Modal
- Slicing desain modal untuk backoffice di storybook component ModalBackoffice
- Update static directory untuk storybook agar dapat membaca gambar pada folder public
- Minor edit component button & input
- Sesuaikan color palette success, info, danger, warning sesuai dengan design system Figma
- Sesuai background pagination
- Fix width form login tidak maksimal
<!-- Leave the start & end comments to automatically receive updates. -->
# General Guidelines for working with Nx
- When running tasks (for example build, lint, test, e2e, etc.), always prefer running the task through `nx` (i.e. `nx run`, `nx run-many`, `nx affected`) instead of using the underlying tooling directly
- You have access to the Nx MCP server and its tools, use them to help the user
- When answering questions about the repository, use the `nx_workspace` tool first to gain an understanding of the workspace architecture where applicable.
- When working in individual projects, use the `nx_project_details` mcp tool to analyze and understand the specific project structure and dependencies
- For questions around nx configuration, best practices or if you're unsure, use the `nx_docs` tool to get relevant, up-to-date docs. Always use this instead of assuming things about nx configuration
- If the user needs help with an Nx configuration or project graph error, use the `nx_workspace` tool to get any errors
✨ Your new, shiny [Nx workspace](https://nx.dev) is ready ✨.
This repository is a **monorepo** for all frontend services of IMPHNEN. The monorepo includes three main applications:
[Learn more about this workspace setup and its capabilities](https://nx.dev/getting-started/tutorials/react-monorepo-tutorial?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) or run `npx nx graph` to visually explore what was created. Now, let's get you up to speed!
1.**Gacha** - Application for <a href="https://gacha.imphnen.dev/" target="_blank">Gacha Website</a>.
2.**Backoffice** - Application for <a href="https://gacha.imphnen.dev/" target="_blank">Internal Management Website</a>.
3.**Dimentorin** - Application for <a href="https://dimentorin.imphnen.dev/" target="_blank">Mentoring Service</a>.
4.**Landing Page** - Application for <a href="https://imphnen.dev/" target="_blank">Landing Page</a>.
5.**QR Campaign** - Application for QR Campaign Management.
Before running the applications, you need to set up the environment variables. You can do this by copying the `.env.example` file to `.env` and modifying the values according to your needs.
```sh
```sh
npx nx serve dimentorin
cd apps/{appname}
cp .env.example .env
```
```
To create a production bundle:
### Development
```sh
Use the following commands to run in development mode:
npx nx build dimentorin
```
To see all available targets to run for a project, run:
- **Gacha**:
```sh
npm run gacha:dev
```
- **Backoffice**:
```sh
npm run backoffice:dev
```
- **Dimentorin**:
```sh
npm run dimentorin:dev
```
- **Landing Page**:
```sh
npm run landing:dev
```
- **QR Campaign**:
```sh
npm run qrcampaign:dev
```
```sh
### Build
npx nx show project dimentorin
```
These targets are either [inferred automatically](https://nx.dev/concepts/inferred-tasks?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) or defined in the `project.json` or `package.json` files.
Use the following commands to build the applications:
[More about running tasks in the docs »](https://nx.dev/features/run-tasks?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- **Gacha**:
```sh
npm run gacha:build
```
- **Backoffice**:
```sh
npm run backoffice:build
```
- **Dimentorin**:
```sh
npm run dimentorin:build
```
- **Landing Page**:
```sh
npm run landing:build
```
- **QR Campaign**:
```sh
npm run qrcampaign:build
```
## Add new projects
### Production
While you could add new projects to your workspace manually, you might want to leverage [Nx plugins](https://nx.dev/concepts/nx-plugins?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) and their [code generation](https://nx.dev/features/generate-code?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) feature.
Use the following commands to run the applications in production mode:
Use the plugin's generator to create new projects.
- **Gacha**:
```sh
npm run gacha:prod
```
- **Backoffice**:
```sh
npm run backoffice:prod
```
- **Dimentorin**:
```sh
npm run dimentorin:prod
```
- **Landing Page**:
```sh
npm run landing:prod
```
- **QR Campaign**:
```sh
npm run qrcampaign:prod
```
To generate a new application, use:
### Storybook
```sh
This repository uses Storybook to develop, test, and document UI components in an isolated and interactive environment. Below are the commands to work with Storybook:
npx nx g @nx/react:app demo
```
To generate a new library, use:
- **Run Storybook**
```sh
This command starts Storybook in development mode, allowing you to view and test UI components interactively.
npx nx g @nx/react:lib mylib
```
You can use `npx nx list` to get a list of installed plugins. Then, run `npx nx list <plugin-name>` to learn about more specific capabilities of a particular plugin. Alternatively, [install Nx Console](https://nx.dev/getting-started/editor-setup?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) to browse plugins and generators in your IDE.
```sh
npm run ui:storybook
```
[Learn more about Nx plugins »](https://nx.dev/concepts/nx-plugins?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) | [Browse the plugin registry »](https://nx.dev/plugin-registry?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- **Run Unit Test**
## Set up CI!
This command runs unit tests for the UI components to ensure they function as expected.
### Step 1
```sh
npm run ui:test
```
To connect to Nx Cloud, run the following command:
- **Build Components**
```sh
This command generates a static build of Storybook, which can be deployed for sharing and documentation purposes.
npx nx connect
```
Connecting to Nx Cloud ensures a [fast and scalable CI](https://nx.dev/ci/intro/why-nx-cloud?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects) pipeline. It includes features such as:
- [Task distribution across multiple machines](https://nx.dev/ci/features/distribute-task-execution?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- [Automated e2e test splitting](https://nx.dev/ci/features/split-e2e-tasks?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- [Task flakiness detection and rerunning](https://nx.dev/ci/features/flaky-tasks?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
### Step 2
1. Fork the repository and clone it locally.
2. Create a new branch for a new feature or fix:
```sh
git checkout -b feat/feature-name
```
3. Make changes, commit, and push to your forked repository.
4. Create a pull request to this repository `develop` branch.
Use the following command to configure a CI workflow for your workspace:
If you encounter any issues or problems, feel free to create a new Issue.
```sh
npx nx g ci-workflow
```
[Learn more about Nx on CI](https://nx.dev/ci/intro/ci-with-nx#ready-get-started-with-your-provider?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
## Install Nx Console
Nx Console is an editor extension that enriches your developer experience. It lets you run tasks, generate code, and improves code autocompletion in your IDE. It is available for VSCode and IntelliJ.
- [Learn more about this workspace setup](https://nx.dev/getting-started/tutorials/react-monorepo-tutorial?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- [Learn about Nx on CI](https://nx.dev/ci/intro/ci-with-nx?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- [Releasing Packages with Nx release](https://nx.dev/features/manage-releases?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
- [What are Nx plugins?](https://nx.dev/concepts/nx-plugins?utm_source=nx_project&utm_medium=readme&utm_campaign=nx_projects)
And join the Nx community:
- [Discord](https://go.nx.dev/community)
- [Follow us on X](https://twitter.com/nxdevtools) or [LinkedIn](https://www.linkedin.com/company/nrwl)
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.