Next.js App Router project structure with TypeScript and Tailwind CSS
landing-page-template-1 — Next.js Business Template
By MohamedDjoudir
MONO is a Next.js-based creative agency portfolio template with a minimalist brutalist style, built-in English and Arabic (RTL) bilingual routing, a contact form, and theme switching.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Built-in en and ar bilingual routing, with the Arabic version mirrored for RTL
All visible copy and metadata centralized in messages/en.json and messages/ar.json
Contact form uses React Hook Form + Zod validation and submits via TanStack Query
src/lib/api centralizes fetch and API addresses for easy backend replacement
Dependencies pinned to exact versions with a committed yarn.lock
Template Details
MONO is a landing page template for creative agencies and portfolios. The code is hosted in the GitHub repository MohamedDjoudir/landing-page-template-1 and is MIT licensed. The template is built with the Next.js App Router, styled with TypeScript and Tailwind CSS, and follows a minimalist brutalist visual direction.
The template includes two languages: English (en, default) and Arabic (ar), routed to /en and /ar respectively. The root path / redirects to /en. All visible copy, aria-labels, alt text, and page metadata are centralized in messages/en.json and messages/ar.json; adding new copy requires updating both files. The layout switches the html lang and dir attributes based on the language and uses Tailwind logical direction utilities (ms-*, pe-*, start-*, text-end) to achieve RTL mirroring. To add a new language, register it in src/i18n/routing.ts, create the corresponding messages file, and record its writing direction in src/i18n/getDirection.ts.
The project structure is organized by responsibility: src/app/[locale] holds the layout and homepage composition, src/features/home splits directories by page section, src/components contains shared UI, icons, and Logo components, src/i18n handles routing and direction, src/lib/api is the only place containing fetch and API addresses, and src/services stores TanStack Query hooks. The contact form data flow is ContactForm (React Hook Form + Zod) → useContactForm → useSendContactMessage → contactApi.send.
The contact form points to a backend that receives POST /contact (payload: name, email, message) via the environment variable NEXT_PUBLIC_API_BASE_URL. When this variable is empty, the form does not send requests and only accepts input locally and displays a success state. Dependencies are pinned to exact versions and a yarn.lock is committed. The demo site and screenshots mentioned in the README come from aniq-ui.com and are third-party assets that must be checked separately under their own licenses; their availability cannot be determined solely by the code's MIT license.
Is it right for your project?
Use Cases
- Building a portfolio landing page for a creative agency or design studio
- Needing a showcase site that supports both English and Arabic RTL
- Connecting the contact form to your own POST /contact backend endpoint
- Using as a structural reference for a Next.js multilingual project, splitting homepage components by section
Suitable For
- Front-end developers familiar with Next.js App Router and TypeScript
- Creative teams needing a bilingual (including RTL) portfolio template
- Projects intending to connect their own contact form backend endpoint
- Users who accept a minimalist brutalist visual style
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Node.js 18.17 or higher and Yarn (can be enabled via corepack enable)
- 2
Run yarn install to install dependencies, optionally copy .env.example to .env.local
- 3
After starting the dev server, visiting / redirects to /en; /ar is the Arabic version
- 4
To receive contact form submissions, set NEXT_PUBLIC_API_BASE_URL in .env.local; if left empty, the form only shows a local success state
- 5
Adding a new language requires modifying src/i18n/routing.ts, the messages directory, and src/i18n/getDirection.ts
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope applies to that version's code and does not imply that external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercially use, and distribute this version's code for free.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The contact form does not send data by default; it only submits when NEXT_PUBLIC_API_BASE_URL is configured to point to a self-hosted backend (receiving POST /contact with payload name, email, message), otherwise it only shows a local success state.
- The online demo and details page in the README point to the third-party site aniq-ui.com; its demo assets and screenshots are not licensed together with the MIT code and must be checked separately for their licenses.
- Support is provided via the contact entry on the external site aniq-ui.com, not within the repository; you must assess the availability and terms of that external service yourself before use.
- Demo images, fonts, icons, and other third-party assets must be checked under their respective licenses; their availability cannot be determined solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional fees.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Leave empty to run without a back-end: the form then accepts the message locally and shows its success state.
Original README
Live demo and details: [aniq-ui.com MONO Template](https://www.aniq-ui.com/en/templates/creative-agency-portfolio-nextjs-template)
Original README
https://github.com/MohamedDjoudir/landing-page-template-1/blob/main/LICENSEhttps://github.com/MohamedDjoudir/landing-page-template-1/blob/main/README.mdFor questions or support, contact the [Aniq UI team](https://www.aniq-ui.com/#contact).
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-03. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 92 / 100
- Technologies
- Next.js · SolidJS · React
- Website type
- Corporate Website · Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-26
- Screenshot last checked
- 2026-10-03
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-04
Inspect the recorded source material
SHA-256: 7bbeeb94817b1cd1dd3322d476f8cfaf33916bc10ed5496b63aa6e5a4e97bcba
2026-10-03T13:49:39.071Z
Source file / repository# MONO - Creative Agency Portfolio Template
**MONO** is a minimal, brutalist portfolio template built with **Next.js 15**, **TypeScript** and **Tailwind CSS**, available in **English** and **Arabic** (RTL).
Live demo and details: [aniq-ui.com MONO Template](https://www.aniq-ui.com/en/templates/creative-agency-portfolio-nextjs-template)
---
## Getting Started
Requirements: Node.js 18.17 or later and Yarn (`corepack enable`).
```sh
yarn install
cp .env.example .env.local # optional, see Environment
yarn dev
```
Open the dev server URL: `/` redirects to `/en`, and `/ar` serves the Arabic (right-to-left) version.
| Script | Purpose |
| ---------------- | -------------------------- |
| `yarn dev` | Start the dev server |
| `yarn build` | Production build |
| `yarn start` | Serve the production build |
| `yarn lint` | Run `next lint` |
| `yarn typecheck` | Run `tsc --noEmit` |
Every dependency is pinned to an exact version and `yarn.lock` is committed.
---
## Environment
| Variable | Purpose |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `NEXT_PUBLIC_API_BASE_URL` | Base URL of the API that receives the contact form (`POST /contact` with `{ name, email, message }`). Leave empty to run without a back-end: the form then accepts the message locally and shows its success state. |
---
## Languages
- Locales: `en` (default) and `ar`, routed as `/en` and `/ar`.
- Messages live in `messages/en.json` and `messages/ar.json`. Every visible string, aria-label, alt text and the page metadata comes from these files, so add a key to both files together.
- `<html lang dir>` follows the locale, and the layout uses logical Tailwind classes (`ms-*`, `pe-*`, `start-*`, `text-end`) so it mirrors under RTL.
- To add a locale, add it to `src/i18n/routing.ts`, create `messages/<locale>.json`, and register its direction in `src/i18n/getDirection.ts`.
- The header holds a `LocaleSwitcher` (`src/components/LocaleSwitcher`).
---
## Project Structure
```
messages/ # en.json, ar.json
src/
├── app/[locale]/ # layout.tsx (html, providers, metadata) and page.tsx (home composition)
├── components/ # Shared components
│ ├── ui/ # Button, Card, Input, Textarea, Badge, SectionHeader, field parts
│ ├── icons/ # Brand SVG icons
│ ├── Logo/ LocaleSwitcher/ FloatingCursor/ NoiseBackground/ TextGenerateEffect/
├── features/home/ # One folder per page section
│ └── <Section>/ # index.tsx + components/ hooks/ constants/ types/ utils/ (as needed)
├── i18n/ # routing, request config, navigation helpers, direction
├── layouts/ # Navbar and Footer
├── lib/
│ ├── api/ # The only place with fetch and endpoint URLs
│ └── utils.ts # cn() helper
├── providers/ # ThemeProvider, QueryProvider
├── services/ # TanStack Query hooks (services/contact/hooks/mutations)
├── styles/ # globals.css
├── types/ # Shared types (ApiResponse, ContactPayload)
└── middleware.ts # Locale routing
```
Conventions: one component per file with an `index.ts` barrel, one hook per file, one helper per file, constants hold keys, routes, icons and numbers only (text lives in the message files).
### Contact form data flow
`ContactForm` (React Hook Form + Zod, messages translated) -> `useContactForm` -> `useSendContactMessage` (`src/services/contact`) -> `contactApi.send` (`src/lib/api/contact.ts`).
---
## Tech Stack
| Technology | Purpose |
| --------------------- | ------------------------------- |
| Next.js 15 | React framework with App Router |
| next-intl | Localisation and locale routing |
| TypeScript | Type safety |
| Tailwind CSS | Utility-first styling |
| Motion | Animations |
| TanStack Query | Mutations and server state |
| React Hook Form + Zod | Forms and validation |
| Lucide React | Icons |
| next-themes | Theme management |
---
## Support
For questions or support, contact the [Aniq UI team](https://www.aniq-ui.com/#contact).
## License
MIT License, see the [LICENSE](LICENSE) file.
Created by [Aniq UI](https://www.aniq-ui.com), premium Next.js templates for modern web apps.
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
