A responsive React, TypeScript, and Vite portfolio presented as an interactive Bat cave Comupter-inspired terminal. Tailwind CSS is integrated through the Vite plugin; feature styles remain colocated with their modules.
npm install
cp .env.example .env.local
# Configure SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, and SMTP_FROM in .env.local.
npm run devnpm run dev runs Vite and the Node mail API together. Create a production build with npm run build, then launch the Node server with npm start. Run Oxlint with npm run lint.
This repository deploys to https://kaal581993.github.io/ using .github/workflows/deploy-pages.yml. Push commits to main to build the site and publish the dist/ artifact. In GitHub, open Settings → Pages and choose GitHub Actions as the build and deployment source. The repository must have only one Pages deployment workflow; the old generated Jekyll workflow was removed because it published the raw Vite source instead of dist/. After the workflow succeeds, check:
https://kaal581993.github.io/robots.txthttps://kaal581993.github.io/sitemap.xml
The sitemap intentionally lists the single portfolio URL; remote service regions are not separate pages.
The proposed subdomain is kaal581993.is-a.dev. A ready-to-submit registry record is at docs/is-a-dev-registration/kaal581993.json. Submit that file in a pull request to is-a-dev/register under domains/kaal581993.json; a maintainer must approve and merge it. Do not switch the production canonical URL before registration is active. After approval, add kaal581993.is-a.dev as the custom domain in GitHub Pages, add public/CNAME containing that hostname, and change SITE_URL in the Pages workflow to https://kaal581993.is-a.dev. Keep HTTPS enforcement enabled after GitHub provisions the certificate.
GitHub Pages hosts static files only. It will not run the Express SMTP API, so the portfolio's direct-email form requires a separate Node-capable host or serverless API deployment.
Set SITE_URL in the production build environment to the site's public origin, with no path, for example https://portfolio.example.com. Then run npm run build. The build generates dist/robots.txt and dist/sitemap.xml with the configured domain and adds the matching canonical and Open Graph URL to the generated HTML. If SITE_URL is absent, the build warns and writes a reserved placeholder domain; do not deploy that output as-is.
The sitemap intentionally lists the portfolio's single real page. The countries and regions in the profile are remote service coverage on that page, not separate local-office landing pages. After deployment, verify domain ownership in Google Search Console and Bing Webmaster Tools, then submit https://YOUR_DOMAIN/sitemap.xml. No analytics or search API keys are needed for indexing.
For Gmail SMTP, use an app password generated for the receiving Gmail account and keep it only in .env.local; never commit real credentials. Production must supply the same SMTP variables through its server environment. The server sends directly over SMTP, sets the visitor email as Reply-To, and never accepts a client-selected recipient.
- Add a portrait image at
public/profile.png. The ASCII portrait renders a built-in fallback if the image is absent or cannot be decoded. - Set
VITE_LINKEDIN_URL,VITE_LEETCODE_URL, andVITE_HACKERRANK_URLin.env.localto your public profile URLs. - Contact form messages are sent server-to-server through SMTP to
viral.prajapati.nmims@gmail.com. The SMTP credentials remain server-side. Configure a provider mailbox and verified sender via theSMTP_*variables before deploying. - Adjust indicative INR prices in
src/features/services-catalog/services.ts. - Update project destinations and career details in
src/features/terminal/commandRegistry.ts.
src/features/ascii-portrait/owns image sampling, fallback rendering, and portrait styles.src/features/matrix-rain/owns the animated canvas and its styles.src/features/terminal/owns the command contract, registry, state hook, window, prompt, output, and styles.src/features/contact/owns the email composer;server/index.tsvalidates and rate-limits direct SMTP delivery.src/features/boot-screen/,profiles/,system-resources/, andservices-catalog/own their named user-facing modules.src/styles/contains page-level shell styling only.
System resource values are browser sandbox metrics, not operating-system-wide CPU or memory readings. Prices are indicative estimates and should be reviewed before quoting a client.