A business card website for the SMM agency "Pentilo Agency".
Pentilo Agency
To create a positive image for the agency and attract clients/partners.
- Serious approach (regular monthly reporting for clients, quality strategy selection).
- Responsibility towards deadlines.
- Flexibility and consideration of client's wishes (sometimes even if it might affect the result).
- Age: 20-35, 35-45, 45-65
- Gender: Male, Female
- Income Level: Medium, High
Development of a single-page business card website for the SMM agency "Pentilo Agency", whose main area of activity is social media marketing (content, shooting, advertising, account moderation).
- Front-end: Next.js
- CSS framework: Tailwind
- Intuitive design.
- Mobile-friendly.
- Web resource available for any internet connection.
- SSL connection.
- No public access to private system components.
- Rate limits.
- Check for common attack types (sqli, xss, etc.).
- All passwords must be hashed.
- User access via sessions.
- Ukrainian
- Clone the repo
git@github.com:SoftRyzen-internship/pentilo-agency.git- Install dependencies It's recommended to use npm:
npm install
- Run the project
npm run dev
Open http://localhost:3000.
Attention! The project structure is not final and can be changed at any time.
💁♀️ Create a components folder for each module
💡 Example:
# ✅ Good
├── layout
├── Header
├── index.ts
├── Header.tsx
├── Footer
├── index.ts
├── Footer.tsx
💁♀️ Reusable css classes should be placed in the styles folder .
💡 Example:
/*globals.css */
@layer components {
.your-class {
@apply ...;
}
}💁♀️ Description of object structure
💡 Structure:
src
|-- components -> folder with components
|-- NameComponent -> folders for each component
|-- NameComponent.tsx -> main component
|-- NameComponent.module.css -> css styles for component
|-- index.ts -> file for re-export
|-- type.ts -> file for type and interface
|--variants.ts -> file for animation
|-- components/ui -> folder with reusable components
|-- NameComponent -> folders for each component
|-- NameComponent.tsx -> main component
|-- NameComponent.module.css -> css styles for component
|-- index.ts -> file for re-export
|-- type.ts -> file for type and interface
|--variants.ts -> file for animation
|-- layout -> components that are used as a main template
|-- app -> pages and routing
|-- public -> static files
|-- styles -> global styles
<!-- You can create these folders already in work -->
|-- data -> data for the project ( from graphql, json, etc.)
|-- hooks -> custom users hooks
|-- utils -> helpers, functions, etc.
Each component has its own API. You can find it in the component's folder. This
is a list of more common components and their API. This is example of API for
component Heading
| Prop | Default | Description |
|---|---|---|
tag |
h2 |
choose the tag of title you'd need: h1 - h3 |
variant |
primary |
main, primary, secondary, tertiary |
children |
undefined |
required, any content |
className |
undefined |
add custom or additional css class you'd need |
data-shadow |
undefined |
add text as a shadow decoration of the element |
| Prop | Default | Description |
|---|---|---|
into |
form |
choose the position you'd need: hero or form |
className |
undefined |
add custom or additional css class you'd need |
| Prop | Default | Description |
|---|---|---|
tag |
a |
required,choose the tag of button you'd need: a or button |
accent |
true |
required,if you need purple button set accent ot true, or set false to another |
children |
undefined |
required, add text content & icon |
href |
undefined |
set link href if you use tag a |
buttonType |
undefined |
add button type 'button' or 'submit' if you use tag 'button' |
onClick |
undefined |
click handler |
disabled |
false |
boolean, if you'd need to disable button |
className |
undefined |
add custom or additional css class you'd need |
| Prop | Default | Description |
|---|---|---|
sectionIdStart |
undefined |
id of section where button should appear from |
The Slider component is created using swiper library.
| Prop | Default | Description |
|---|---|---|
section |
undefined |
choose the name of the section: cases, services or expertise |
pagination |
false |
choose the pagination availability: false or true |
navigation |
false |
choose the navigation availability: false or true |
autoplay |
false |
choose the autoplay availability: false or true |
data |
undefined |
any array of data for mapping |
element |
undefined |
the element that will be placed inside the slide |
className |
undefined |
add any custom styles of .swiper element |
slideClassName |
undefined |
add any custom styles of .swiper-slide element |
className |
undefined |
add any custom styles of .swiper element |
loop |
false |
choose the loop enabled: false or true |