Contribute

Help improving egytech.fyi

Thanks for helping making egytech.fyi better! We're happy to have you. Please follow the instructions below to setup your local development environment and get started. We strongly recommend that you check for open issues and pull requests to see if someone else is working on something similar.

Discuss your Thoughts

Before you fix a bug or work on a feature, please open an issue first to discuss it and confirm it's beneficial to the project. This helps saving the maintainers & contributors time and ensures faster approval for PRs.

Updating Content

For modifying or adding new content. You'll likely need to only do changes inside /app/content folder. See project structure for more info.

Tech Stack

  • Nuxt 3
  • TypeScript
  • TailwindCSS
  • Shadcn-Vue
  • Cloudflare Pages
  • šŸ§© Shadcn-Docs and Nuxt Content modules (See below for more info)

Prerequisites

Make sure the following are installed on your machine

Local Development

Clone the repo

terminal
git clone https://github.com/MuhammadM1998/egytech.fyi.git

Enable Corepack

terminal
corepack enable

Install Dependencies

pnpm
pnpm install

Start the Dev Server

terminal
pnpm dev

The app should be running on localhost:3000

Build Locally

You can build the project and preview it locally before submitting a PR to ensure everything is working as expected.

Build

pnpm
pnpm build

Preview

pnpm
pnpm preview

The generated build should be running on localhost:3000

Creating a new branch

Checkout to a new branch to implement your idea and test it locally.

terminal
git checkout -b my-branch

Submitting a PR

When you're confident your branch is working as expected without errors. Submit a PR and make sure its title is adhering to Conventional Commits as we squash the PR and use its title as the message for cleaner history.

Project Structure

Below is an overview of the project structure with comments to clarify the folder/file scope.

./
ā”œā”€ .github/ # GitHub composite actions, workflows, PRs & issues templates, etc.. 
ā”œā”€ .vscode/ # Project settings & extensions for VSCode
ā”œā”€ app
ā”‚  ā”œā”€ assets/
ā”‚  ā”œā”€ components/ 
ā”‚  ā”‚  ā”œā”€ content/ # Contains any components used in md files
ā”‚  ā”‚  ā”œā”€ global/ # Contains custom icons as vue files
ā”‚  ā”‚  ā”‚  ā””ā”€ InstapayDuotone.vue
ā”‚  ā”‚  ā”œā”€ layout/ # Contains any components used in md files
ā”‚  ā”‚  ā””ā”€ ui/ # shadcn-vue & our custom ui components
ā”‚  ā”œā”€ composables/
ā”‚  ā”œā”€ content/ # MD files for the website content.
ā”‚  ā”‚  ā”œā”€ 2024/ # Year folder. User can switch between the available years in the website
ā”‚  ā”‚  ā”‚  ā”œā”€ dashboard.md
ā”‚  ā”‚  ā”‚  ā””ā”€ report.md
ā”‚  ā”‚  ā”œā”€ 2023/
ā”‚  ā”‚  ā”‚  ā”œā”€ dashboard.md
ā”‚  ā”‚  ā”‚  ā”œā”€ report.md
ā”‚  ā”‚  ā”‚  ā””ā”€ extra-file.md
ā”‚  ā”‚  ā””ā”€ community/ # Non year folder. Always visible no matter the selected year.
ā”‚  ā”‚     ā”œā”€ contribute.md
ā”‚  ā”‚     ā””ā”€ participate.md
ā”‚  ā”œā”€ lib/ # shadcn-vue utils
ā”‚  ā”œā”€ pages/ 
ā”‚  ā””ā”€ app.config.ts # Config for Shadcn-Docs module and our custom config
ā”œā”€ public/
ā””ā”€ components.json # Components config for shadcn-vue
ā””ā”€ nuxt.config.ts
ā””ā”€ tailwind.config.ts
ā””ā”€ eslint.config.js
ā””ā”€ .prettierrc
ā””ā”€ .editorconfig
ā””ā”€ .npmrc
ā””ā”€ .gitignore
ā””ā”€ package.json
ā””ā”€ pnpm-lock.yaml
ā””ā”€ README.md

Shadcn-Docs & Nuxt Content

This project utilizes Shadcn-Docs-Nuxt module for a beautiful & feature-rich documentation out of the box based on Nuxt Content. You'll likely need to refer their docs often while working on a feature.

  • Shadcn-Docs is in early development. If you encountered a bug. Consider submitting a PR upstream to Shadcn-Docs rather than this project. This benefits us and others using the module. Once its merged & released upstream we'll bump the module and get the newest updates.
  • If you have a change in mind that seems specific to this project. You can always override Shadcn-Docs components by creating a new .vue file with the same name. We're already doing this with the following files and others
    • pages/[...slug].vue
    • pages/index.vue
    • components/layout/Header/Header.vue
    • components/layout/Aside.vue
  • Shadcn-Docs also exposes some shadcn-vue components such as Input, Button. Hence we don't need to re-add them in our project. If you added a new shadcn-vue component and got a warning in the console for duplicate components, this means the component is already added by Shadcn-Docs and you can use it directly without re-adding it.