Skip to content

Repository files navigation

BitNByte IT β€” Company Website

The official BitNByte IT website. Built with React 18, Vite, Tailwind CSS, and Framer Motion. Designed to deploy on GitHub Pages with a custom domain (bitnbyteit.com).

Your Vision. Our Code. Your Success.


πŸš€ Quick Start (Local Development)

Requires Node.js 18+.

# 1. Install dependencies
npm install

# 2. Start dev server
npm run dev

# Open http://localhost:5173

That's it. Edits to JSON files in src/data/ reflect instantly thanks to Vite HMR.


πŸ“¦ Project Structure

bitnbyte-it/
β”œβ”€β”€ public/                  # Static assets served as-is
β”‚   β”œβ”€β”€ CNAME               # Your custom domain (bitnbyteit.com)
β”‚   β”œβ”€β”€ favicon.png         # Site favicon
β”‚   β”œβ”€β”€ og-cover.png        # OpenGraph share image
β”‚   └── posts/              # Blog post images
β”‚
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ assets/             # Imported assets (logo, covers)
β”‚   β”œβ”€β”€ components/         # Reusable React components
β”‚   β”‚   β”œβ”€β”€ Layout.jsx      # Page shell (Navbar + Outlet + Footer)
β”‚   β”‚   β”œβ”€β”€ Navbar.jsx      # Top nav + theme toggle
β”‚   β”‚   β”œβ”€β”€ Footer.jsx      # Footer + newsletter signup
β”‚   β”‚   β”œβ”€β”€ Hero.jsx        # Landing hero section
β”‚   β”‚   β”œβ”€β”€ Terminal.jsx    # Auto-typing terminal animation
β”‚   β”‚   β”œβ”€β”€ Marquee.jsx     # Tech-stack scrolling marquee
β”‚   β”‚   β”œβ”€β”€ ServiceCard.jsx # Reusable service card
β”‚   β”‚   β”œβ”€β”€ DeviceShowcase.jsx # Desktop/tablet/mobile mockups
β”‚   β”‚   β”œβ”€β”€ SectionHeading.jsx # Reusable section header
β”‚   β”‚   └── Logo.jsx        # Brand logo component
β”‚   β”‚
β”‚   β”œβ”€β”€ pages/              # Route-level pages
β”‚   β”‚   β”œβ”€β”€ Home.jsx
β”‚   β”‚   β”œβ”€β”€ Services.jsx
β”‚   β”‚   β”œβ”€β”€ Portfolio.jsx
β”‚   β”‚   β”œβ”€β”€ About.jsx
β”‚   β”‚   β”œβ”€β”€ Blog.jsx
β”‚   β”‚   β”œβ”€β”€ Contact.jsx     # Includes validated form β†’ Google Sheets
β”‚   β”‚   β”œβ”€β”€ Privacy.jsx
β”‚   β”‚   β”œβ”€β”€ Terms.jsx
β”‚   β”‚   β”œβ”€β”€ Help.jsx        # FAQ page
β”‚   β”‚   └── NotFound.jsx
β”‚   β”‚
β”‚   β”œβ”€β”€ data/               # 🌟 ALL content lives here β€” edit JSON to update site
β”‚   β”‚   β”œβ”€β”€ site.json       # Company info, contacts, social, terminal text
β”‚   β”‚   β”œβ”€β”€ services.json   # Services list
β”‚   β”‚   β”œβ”€β”€ projects.json   # Portfolio projects
β”‚   β”‚   β”œβ”€β”€ reviews.json    # Client testimonials
β”‚   β”‚   β”œβ”€β”€ blog.json       # Blog posts
β”‚   β”‚   └── linkedin.json   # LinkedIn post links (paste your post URLs here)
β”‚   β”‚
β”‚   β”œβ”€β”€ hooks/
β”‚   β”‚   └── useTheme.js     # Dark/light mode logic
β”‚   β”‚
β”‚   β”œβ”€β”€ App.jsx             # Router + route registration
β”‚   β”œβ”€β”€ main.jsx            # React entry
β”‚   └── index.css           # Tailwind + custom utilities
β”‚
β”œβ”€β”€ .github/workflows/
β”‚   └── deploy.yml          # Auto-deploy on push to main
β”‚
β”œβ”€β”€ google-apps-script.gs   # Backend for contact form (paste in Apps Script)
β”œβ”€β”€ tailwind.config.js
β”œβ”€β”€ vite.config.js
β”œβ”€β”€ package.json
└── index.html

✏️ How to Update Content (JSON-Driven)

Everything on the website is driven by JSON files in src/data/. Edit a JSON file, save, and the site updates everywhere it appears.

Change company info / contact details

Edit src/data/site.json:

{
  "company": { "name": "...", "tagline": "...", "location": "..." },
  "contact": { "email": "...", "whatsapp": ["..."], "address": "..." },
  "social": { "linkedin": "...", "facebook": "...", "github": "..." }
}

Add a new service

Append to the services array in src/data/services.json. The icon field is a Lucide icon name β€” e.g. "Code2", "Cloud", "Sparkles".

Add a portfolio project

Append to src/data/projects.json. The category field automatically appears as a filter chip on the Portfolio page.

Add a client review

Append to src/data/reviews.json. The avatar field is a 1–2 character initial string.

Add a blog post

Append to src/data/blog.json. Set the cover path to point to an image in public/posts/.

Add / update LinkedIn posts displayed on the site

Edit src/data/linkedin.json. Paste your LinkedIn post URLs in the url field:

{
  "id": "li-4",
  "url": "https://www.linkedin.com/posts/bitnbyte-it-XXXXXX-activity-YYYYYYY",
  "title": "Your post title",
  "excerpt": "Short summary...",
  "image": "/posts/post1.jpg",
  "date": "2026-02-01"
}

Update the auto-typing terminal animation

Edit the terminalLines array in src/data/site.json. Each string is a line that types itself out.

Update the scrolling tech-stack marquee

Edit the marquee array in src/data/site.json.


πŸ“¨ Contact Form β†’ Google Sheets Setup

The contact form and newsletter send submissions to a Google Sheet via Google Apps Script. Free, no backend needed.

One-time setup (10 minutes)

  1. Create the sheet

    • Go to sheets.google.com and create a new sheet
    • Name it: BitNByte Contacts
    • (Optional) Add two tabs: Contacts and Newsletter β€” the script will create them automatically if missing
  2. Add the script

    • In the sheet, click Extensions β†’ Apps Script
    • Delete any existing code
    • Open google-apps-script.gs from this repo
    • Copy its entire contents and paste into the Apps Script editor
    • Press Ctrl/Cmd + S to save (give the project any name)
  3. Deploy as web app

    • Click Deploy β†’ New deployment (top right)
    • Click the gear βš™οΈ icon β†’ choose Web app
    • Description: BitNByte form handler
    • Execute as: Me (your account)
    • Who has access: Anyone
    • Click Deploy
    • Authorize when prompted (ignore Google's "unsafe" warning β€” it's your own script)
    • Copy the Web app URL (looks like https://script.google.com/macros/s/AKfy.../exec)
  4. Paste the URL into the site

    • Open src/data/site.json
    • Replace REPLACE_WITH_YOUR_APPS_SCRIPT_URL for both contactFormUrl and newsletterUrl with the URL you copied (same URL for both β€” the script routes by source)
  5. Test it!

    • Run npm run dev, fill out the contact form, submit. A new row should appear in your sheet.

The script also auto-sends you an email notification on each new contact submission (configured for bitnbyteit1@gmail.com).


🌐 GitHub Pages Deployment

Option A β€” Custom Domain (bitnbyteit.com) β€” recommended

Step 1: Create the GitHub repo

  1. Go to github.com/new
  2. Repo name: bitnbyte-website (or bitnbyteit.com)
  3. Public is required for free GitHub Pages. (Private Pages needs GitHub Pro/Team.)
  4. Don't initialize with README β€” we already have one

Step 2: Push your code

cd bitnbyte-it
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/bitNbyteIT/bitnbyte-website.git
git push -u origin main

Step 3: Enable GitHub Pages

  1. Go to your repo β†’ Settings β†’ Pages
  2. Under Source, select GitHub Actions
  3. The workflow in .github/workflows/deploy.yml runs automatically on every push to main

Step 4: Point your domain to GitHub Pages At your domain registrar (where you bought bitnbyteit.com), add these DNS records:

For the root domain (bitnbyteit.com), add 4 A records:

@   A   185.199.108.153
@   A   185.199.109.153
@   A   185.199.110.153
@   A   185.199.111.153

For www.bitnbyteit.com, add a CNAME record:

www   CNAME   bitNbyteIT.github.io

Then in repo Settings β†’ Pages β†’ Custom domain, enter bitnbyteit.com and check Enforce HTTPS once DNS propagates (usually 5 min – 24 hr).

The public/CNAME file is already set so the custom domain persists across deployments.

Option B β€” <username>.github.io/<repo> path

If you'd rather use https://bitnbyteit.github.io/bitnbyte-website/:

  1. Open vite.config.js and change base: '/' to base: '/bitnbyte-website/' (replace with your repo name)
  2. Delete public/CNAME (don't need it for github.io subdomain)
  3. Push to main β€” the action will deploy

About private repos on GitHub Pages

You cannot host a private repo on GitHub Pages with a free account. GitHub Pages with a private source repo is only available on GitHub Pro, Team, or Enterprise plans. For a marketing website, public is fine β€” the code being visible is normal and expected. Don't put any secret keys or credentials in the repo.


🎨 Theming

  • Default theme is dark (per your preference)
  • Users can toggle via the sun/moon button in the navbar
  • Choice is persisted in localStorage
  • Brand colors live in tailwind.config.js under theme.extend.colors.brand

To tweak the brand palette, edit the brand.blue and brand.orange scales in tailwind.config.js.


πŸ› οΈ Tech Stack

  • React 18 + Vite β€” fast dev experience, static build
  • Tailwind CSS 3 β€” utility-first styling with custom brand tokens
  • Framer Motion β€” page transitions and micro-animations
  • React Router v6 β€” HashRouter for GitHub Pages compatibility
  • Lucide React β€” clean, consistent icons
  • Google Apps Script β€” free backend for the contact form

πŸ“œ Available Scripts

Command Description
npm run dev Start the dev server (HMR enabled)
npm run build Build for production into dist/
npm run preview Preview the production build locally

🎯 Roadmap Ideas

  • Hook up a real CMS (Contentful, Sanity, or just keep JSON)
  • Add a real blog post detail route (currently blog cards are display-only)
  • Auto-fetch LinkedIn posts via their API (requires app approval)
  • Add Google Analytics or Plausible
  • Add Calendly embed for booking consultations
  • Multi-language (Bangla / English)

πŸ“„ License

Β© BitNByte IT. All rights reserved.


Built with care by the BitNByte IT team. 🧑

About

BitNByte IT is a full-service technology solutions company dedicated to helping businesses, entrepreneurs, and organizations succeed in the digital world.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages