DigiReps is a full-stack web platform that connects businesses with elite remote digital professionals β from Sales Development Reps and Customer Support Agents to Backend Developers and UI/UX Designers. Built with modern web technologies, it features dynamic CMS-powered content, JWT-based authentication, Cloudinary media uploads, and a multi-page responsive interface.
Visit: http://localhost:3000 (development) β Production deployment via Vercel.
| Technology | Version | Purpose |
|---|---|---|
| Next.js | ^15.2.4 | Full-stack React framework (App Router) |
| React | ^19.1.0 | UI library |
| TypeScript | ^5.x | Type-safe JavaScript |
| Tailwind CSS | ^4.1.3 | Utility-first styling |
| tw-animate-css | ^1.2.8 | CSS animation utilities |
| GSAP | ^3.12.7 | Advanced scroll & animation |
| Swiper | ^11.2.6 | Touch-enabled sliders & carousels |
| React Fast Marquee | ^1.6.5 | Marquee / infinite scroll |
| Lucide React | ^0.503.0 | Icon library |
| React Icons | ^5.5.0 | Extended icon set |
| Technology | Version | Purpose |
|---|---|---|
| Contentful | ^11.5.22 | Headless CMS for all dynamic content |
| Next.js API Routes | built-in | Server-side API handlers |
| jsonwebtoken | ^9.0.2 | JWT signing & verification |
| jwt-decode | ^4.0.0 | Client-side JWT decoding |
| Cloudinary | via API | Profile image CDN uploads |
| Technology | Purpose |
|---|---|
| Radix UI | Accessible headless UI primitives (Dialog, Popover, Slot) |
| cmdk | Command palette component |
| clsx + tailwind-merge | Conditional class merging |
| uuid | Unique ID generation |
| react-intersection-observer | Viewport-based animations |
| Tool | Purpose |
|---|---|
ESLint + eslint-config-next |
Code quality & linting |
| PostCSS + Autoprefixer | CSS processing |
| Lightning CSS | Fast CSS bundling |
digireps-master/
βββ src/
β βββ app/ # Next.js App Router pages
β β βββ (solutions)/ # Solution-specific pages (route group)
β β β βββ back-end-developer/
β β β βββ customer-support-rep/
β β β βββ digital-marketing-rep/
β β β βββ executive-assistant/
β β β βββ front-end-developer/
β β β βββ leads-researcher/
β β β βββ sales-development-rep/
β β β βββ ui-ux-designer/
β β βββ aboutus/ # About Us page
β β βββ api/revalidate/ # ISR revalidation endpoint
β β βββ auth/callback/ # Auth token callback handler
β β βββ contact/ # Contact page
β β βββ edit-profile/ # User profile edit page
β β βββ forget-password/ # Forgot password page
β β βββ portal/ # Login / Sign Up portal
β β βββ privacy-policy/ # Privacy policy page (CMS-driven)
β β βββ profile/ # User profile view page
β β βββ terms-condition/ # Terms & Conditions page (CMS-driven)
β β βββ users/ # User management routes
β β βββ verified/ # Email verification success page
β β βββ layout.tsx # Root layout (Header, Footer, Providers)
β β βββ page.tsx # Homepage
β βββ components/
β β βββ Headers/ # Header + navigation
β β βββ Footer/ # Footer with CMS-driven contact & review logos
β β βββ Modals/ # Book Consultation modal
β β βββ about/ # About page sections (Stats, Team, etc.)
β β βββ contact/ # Contact page sections
β β βββ home/sections/ # Homepage sections
β β β βββ Hero.tsx
β β β βββ CompetitiveEdge.tsx
β β β βββ EmpowerYourBusiness.tsx
β β β βββ DigiRepsDifference.tsx
β β β βββ PartnerLogos.tsx # Swiper logo carousel
β β β βββ SuccessStories.tsx
β β β βββ TestimonialsSection.tsx
β β β βββ ...more
β β βββ metaData/ # Facebook Pixel integration
β β βββ policies/ # Privacy & Terms components
β β βββ solutions/ # Reusable solution page components
β βββ context/
β β βββ AuthContext.tsx # JWT auth context (login, logout, auto-expiry)
β β βββ ModalContext.tsx # Global modal open/close state
β βββ instrumentation.ts # Server startup hook (localStorage polyfill)
βββ lib/
β βββ contentful.js # Lazy Contentful client factory
β βββ types/contentful.ts # Contentful type definitions
βββ public/ # Static assets (images, scripts, fonts)
βββ next.config.ts # Next.js config (serverExternalPackages, images)
βββ tailwind.config.ts # Tailwind configuration
βββ package.json
- Node.js β₯ 18.x (recommended: use LTS; v25+ requires
--localstorage-fileworkaround β handled automatically viainstrumentation.ts) - npm β₯ 9.x
git clone <repository-url>
cd digireps-masternpm installCreate a .env.local file in the project root:
# Contentful CMS
NEXT_PUBLIC_CONTENTFUL_SPACE_ID=your_space_id
NEXT_PUBLIC_CONTENTFUL_DELIVERY_TOKEN=your_delivery_access_token
NEXT_PUBLIC_CONTENTFUL_PREVIEW_TOKEN=your_preview_access_token
# Backend API base URL
NEXT_PUBLIC_URI=https://your-backend-api.com
# Cloudinary (for profile image uploads)
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloud_name
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=your_upload_presetNote: Without Contentful credentials the app still runs but CMS-driven sections (footer, testimonials, partner logos, case studies) will render empty β this is handled gracefully via the mock client.
npm run devVisit http://localhost:3000 to view the app.
npm run build
npm run startDigiReps uses a custom JWT-based authentication flow:
- Users sign in via the
/portalpage. - On success, the backend returns a JWT token stored in
localStorage. AuthContextdecodes the token, restores the session on page load, and schedules auto-logout on token expiry.- Protected routes (
/profile,/edit-profile) redirect to/portalif no valid token is found.
Auth routes:
| Route | Description |
|---|---|
/portal |
Login / Sign Up page |
/auth/callback |
OAuth / magic link callback handler |
/forget-password |
Password reset request |
/verified |
Email verification confirmation |
All dynamic content is managed via Contentful CMS. The following content types are used:
| Content Type ID | Used In |
|---|---|
footerContactDetails |
Footer β contact address, email, phone |
footerReviewsPlatform |
Footer β review platform logos (e.g. G2, Capterra) |
partnerLogos |
Homepage β partner logo slider |
solutionCards |
Homepage β service category cards |
digirepsDifferenceVideo |
Homepage β explainer video section |
homepageCaseStudies |
Homepage β success stories |
testimonial |
Testimonials section |
stats |
About / Homepage stats bar |
solutionsCaseStudies |
Solution pages β tagged case studies |
privacyPolicy |
Privacy Policy page |
termsAndConditions |
Terms & Conditions page |
| Route | Description |
|---|---|
/ |
Homepage |
/aboutus |
About Us page |
/contact |
Contact page |
/portal |
Authentication portal |
/profile |
Authenticated user profile |
/edit-profile |
Edit user profile & portfolio |
/privacy-policy |
Privacy Policy |
/terms-condition |
Terms & Conditions |
/solutions/back-end-developer |
Backend Developer hiring page |
/solutions/front-end-developer |
Frontend Developer hiring page |
/solutions/ui-ux-designer |
UI/UX Designer hiring page |
/solutions/sales-development-rep |
Sales Development Rep hiring page |
/solutions/customer-support-rep |
Customer Support Rep hiring page |
/solutions/leads-researcher |
Leads Researcher hiring page |
/solutions/digital-marketing-rep |
Digital Marketing Rep hiring page |
/solutions/executive-assistant |
Executive Assistant hiring page |
Node.js v25 introduces an experimental built-in localStorage object that is broken (non-functional) without the --localstorage-file flag. This causes third-party libraries like contentful to crash during SSR.
Handled automatically via:
src/instrumentation.tsβ polyfillslocalStorageat server startup before any request handler runs.next.config.tsβserverExternalPackages: ['contentful']prevents the contentful browser bundle from being processed by webpack for server-side code.
Configured in next.config.ts to allow images from:
res.cloudinary.comβ user profile imagesimages.ctfassets.netβ Contentful media assetslh3.googleusercontent.comβ Google profile pictures
| Command | Description |
|---|---|
npm run dev |
Start development server at http://localhost:3000 |
npm run build |
Build the production bundle |
npm run start |
Start the production server |
npm run lint |
Run ESLint checks |
This project is proprietary. All rights reserved Β© DigiReps.