Appriyo is a technology-driven problem-solving company helping businesses improve operations through practical software, automation, and digital systems.
- Appriyo – Official Website
- 🌟 Overview
- 🎯 Why Appriyo Exists
- 🧠 Core Philosophy
- 🎯 Current Focus
- 🧩 Website Sections
- 💼 Core Services
- 🚀 Product Strategy
- 🛠 Tech Stack
- 🚀 Getting Started
- 🌍 Internationalization (i18n)
- 📁 Project Structure
- 🎨 Design & UI
- 🔧 Planned Improvements
- 🤝 Team & Collaboration
- 📍 Company Information
- 📚 Documentation
- 🤝 Contributing
- 📜 License
- 💬 Final Note
- 📞 Contact
This repository contains the official website of Appriyo — a student-led technology company focused on solving real-world business problems through practical software solutions, automation, AI integration, and digital systems.
Appriyo does not define itself by a single technology stack.
We focus on:
- Understanding operational problems
- Building practical solutions
- Helping businesses improve efficiency
- Learning through real-world execution
- Turning repeated problems into scalable products
Whether the solution requires:
- Web applications
- Mobile apps
- Cross-platform systems
- Automation workflows
- AI integrations
- SaaS platforms
the technology itself is secondary.
The real goal is solving problems.
Appriyo exists because we believe the best way to learn technology and business is by building real systems for real people.
We are currently CSE students building Appriyo to:
- Gain real-world experience before graduation
- Build products used by actual users
- Create a strong portfolio and practical work history
- Learn teamwork, communication, and execution
- Generate sustainable income over time
- Build a long-term technology company from the ground up
For us, success right now means:
- Real users
- Real impact
- Real experience
- Real learning
- Sustainable growth
Even a small recurring income before graduation is considered meaningful progress.
| Principle | Meaning |
|---|---|
| Problem-First | We focus on solving problems, not chasing technologies |
| Practicality Over Complexity | Simple systems are often the most effective |
| Learning Through Execution | Real-world work teaches faster than theory alone |
| Long-Term Thinking | We build maintainable systems and sustainable relationships |
| Technology Agnostic | We use whatever technology best solves the problem |
| Real Value Matters | We prioritize usefulness over hype |
For the next 1.5 years, Appriyo is focused on building a strong foundation before graduation.
Our current priorities are:
- Building practical products
- Showcasing our work publicly
- Working with real businesses
- Acquiring clients
- Building visibility and trust
- Improving our technical expertise
- Learning business operations deeply
- Creating recurring income streams
Right now, we intentionally offer a broader range of services because we are still learning, experimenting, and discovering where our strongest long-term expertise will be.
Over time, Appriyo will naturally specialize based on:
- Experience
- Client demand
- Market opportunities
- Team expertise
- Real-world execution
| Section | Description |
|---|---|
| Hero | Problem-solving focused company positioning |
| Services | Software, automation, AI integration, and digital systems |
| Products | SaaS products built from real operational problems |
| Why Appriyo | Philosophy, approach, and long-term thinking |
| Our Process | How we understand and solve business problems |
| About | Team, mission, and company direction |
| Contact | Communication and consultation pathways |
| Footer | Legal, social, and company information |
Appriyo focuses on solving operational and workflow problems using technology.
We build systems tailored to specific business operations.
Examples:
- Internal management systems
- Tracking platforms
- Workflow systems
- Operational dashboards
We build:
- Websites
- Web apps
- Android applications
- Cross-platform systems
when they directly improve business operations or user workflows.
We help businesses reduce repetitive manual work through:
- Reminder systems
- Smart workflows
- Automated tracking
- Notification systems
- Operational automation
We integrate AI where it creates real practical value.
Examples:
- AI-assisted workflows
- AI-powered tools
- Smart operational systems
- Productivity-enhancing AI features
We convert repeated business problems into reusable software products.
Our long-term goal is building scalable SaaS systems based on real operational pain points.
Appriyo does NOT focus on:
- Building unnecessary complexity
- Chasing every technology trend
- Taking low-value freelance work
- Overpromising expertise
- Purely aesthetic projects without practical value
- Technology-first development without real business impact
We believe great products come from real-world operational problems.
Current products include:
| Product | Description |
|---|---|
| Amar Repair | Repair store management system |
| Amar Batch | Teacher and batch management system |
More products will evolve naturally from:
- Client work
- Operational pain points
- Real user feedback
- Repeated workflow problems
Build → Test → Learn → Improve
We focus on:
- Real users
- Real workflows
- Real operational improvements
instead of assumptions.
| Technology | Purpose |
|---|---|
| React 18 | Frontend UI library |
| Vite | Development & build tooling |
| Tailwind CSS | Utility-first styling |
| DaisyUI | Component system |
| react-i18next / i18next | Internationalisation runtime |
| i18next-browser-languagedetector | Browser language + storage detection |
| JavaScript (ES6+) | Core application language |
| HTML5 & CSS3 | Base frontend structure |
The technology stack may evolve over time.
We choose tools based on:
- Problem requirements
- Scalability
- Maintainability
- Development speed
- Practicality
- Node.js (v18 or higher)
- npm / yarn / pnpm
# Clone the repository
git clone https://github.com/Appriyo/appriyo-website.git
# Navigate to project directory
cd appriyo-website
# Install dependencies
npm install
# Start development server
npm run devThe application will run on:
http://localhost:5173
npm run build
npm run previewThe site is bilingual today (English + Bangla) and the i18n layer is designed for production scale — adding a third language is a config-only change, switching languages has no flash of untranslated UI, and every public string is sourced from a typed translation file.
| Package | Role |
|---|---|
i18next |
Translation runtime and resource container. |
react-i18next |
React bindings (useTranslation, Trans, hooks). |
i18next-browser-languagedetector |
Reads preferred language from localStorage → navigator.language → English fallback. |
- Default language:
en. Supported:en,bn. - Detection order:
localStorage(appriyo:language:v1) →navigator.language→DEFAULT_LANGUAGE. - Persistence: every
setLanguage(...)call writes the active code tolocalStorage. The same key is read on the next page load to avoid a one-frame fallback-language flash. - HMR: editing any file under
src/locales/**re-applies the bundle and forces React to re-render — no reload required. <html lang>and<html dir>: updated synchronously onlanguageChanged, sourced from the per-language config so adding an RTL language is a one-line change.<title>and<meta>: updated byusePageMetawith both a re-render effect and ani18n.on("languageChanged", …)listener, so meta keeps in sync even when nothing in the tree re-renders.
src/
├── i18n/
│ ├── config.js # SUPPORTED_LANGUAGES, NAMESPACES, NAMESPACE_TO_FOLDER
│ ├── loadResources.js # import.meta.glob → i18next resources
│ ├── useLanguage.js # useTranslation wrapper + setLanguage
│ ├── hooks.js # Public barrel — import { useLanguage } from "@/i18n/hooks"
│ └── index.js # Single init entry, imported once from main.jsx
│
└── locales/
├── en/ # One folder per namespace, mirrors NAMESPACES + NAMESPACE_TO_FOLDER
│ ├── common/common.json
│ ├── navigation/navigation.json
│ ├── layout/layout.json
│ ├── home/home.json
│ ├── services/services.json
│ ├── solutions/solutions.json
│ ├── products/products.json
│ ├── product-detail/product-detail.json # Folder name is kebab-case, namespace name is camelCase
│ ├── about/about.json
│ ├── contact/contact.json
│ ├── metadata/metadata.json # Source of truth for <title> + <meta description>
│ ├── legal/legal.json
│ ├── errors/errors.json
│ └── index.js # Explicit imports for editor tooling
└── bn/ # Same structure, Bangla translations
The metadata namespace is the single source of truth for SEO: every
page uses usePageMeta({ titleKey, descriptionKey }) so the <title>
and <meta name="description"> automatically translate.
-
Copy the folder.
cp -r src/locales/en src/locales/<code>and translate every JSON. Empty objects are fine for placeholders — i18next falls back to English until translated. -
Register the language. Add an entry to
SUPPORTED_LANGUAGESinsrc/i18n/config.js:{ code: "ar", label: "Arabic", nativeLabel: "العربية", dir: "rtl", // ← "rtl" for Arabic, Hebrew, Urdu, … flag: "🇸🇦", }
-
(Optional) Editor imports. Add an explicit
src/locales/<code>/index.jsso editors surface individual files in "Find references".
The runtime picks it up automatically — import.meta.glob in
loadResources.js discovers the new JSON files, the parity check
verifies they're in lockstep with en/, and the LanguageSwitcher
renders the new option without any other change.
- Register the namespace name in
NAMESPACES(camelCase — e.g.productDetail). - Add the matching on-disk folder to
NAMESPACE_TO_FOLDER. Use kebab-case for the folder name (product-detail) when the URL slug would too. - Create
src/locales/<lng>/<folder>/<folder>.jsonfor every supported language. - Read with
const { t } = useLanguage("<namespace>")fromsrc/i18n/hooks.
- Keys are dotted.
t("home.hero.headline")looks uphome→hero→headline. The i18next config swapskeySeparatorandnsSeparatorso the prefix is the namespace and the suffix is the nested path. - Namespaces match folders. The on-disk folder for a namespace is
declared in
NAMESPACE_TO_FOLDER; never guess. The folder and the JSON filename must match. - No HTML in translations. Strings are rendered into the DOM as
text. Use
react-i18next<Trans>if you really need inline markup (the codebase currently doesn't). - Interpolation. Use
{name}-style tokens that match keys passed tot(key, { name: ... }). Escape braces with'{' '{'. - URLs don't belong in JSON. Routes are language-independent; put
them in a sibling
src/data/*.jsmodule (seesrc/data/homeCtas.jsfor the home hero CTA URLs). - Plurals. Use i18next's
_one/_othersuffix when the count varies, and look up witht("key", { count: n }). - Empty keys. Leave the value empty (
"") if you have no translation yet; themissingKeyHandlerwill warn in dev.
Both supported languages are LTR today, but the plumbing is already in place:
SUPPORTED_LANGUAGEScarries adirfield per language.main.jsxsetsdocument.documentElement.diron every language change viagetDirFor(code).- The
LanguageSwitchershows each option'slangattribute, so screen readers pronounce correctly even for a future Arabic locale.
To verify RTL behaviour without committing a new locale, temporarily
edit config.js to add:
{ code: "ar", label: "Arabic", nativeLabel: "العربية", dir: "rtl", flag: "🇸🇦" }…copy src/locales/en to src/locales/ar, then switch via
LanguageSwitcher — the entire layout (including the
LanguageSwitcher itself) will reflow RTL because dir on <html>
cascades to every descendant.
import { useLanguage } from "../../i18n/hooks";
function Greeting() {
const { t } = useLanguage("navigation");
return <h1>{t("navigation.home")}</h1>;
}import { useLanguage } from "../../i18n/hooks";
import LanguageSwitcher from "../../components/ui/LanguageSwitcher";
function HeaderActions() {
const { language, setLanguage } = useLanguage();
return (
<>
<LanguageSwitcher />
<button onClick={() => setLanguage("bn")}>Use Bangla</button>
</>
);
}The included LanguageSwitcher is a self-contained dropdown that lists
every language in SUPPORTED_LANGUAGES, persists the choice, owns
click-outside / Escape behaviour, and announces the active option via
aria-selected. Drop it into Nav, Footer, or a settings menu as-is.
- The skip-link label is in the
layoutnamespace and updates on language change. - Every
<input>inContactFormand the homeContactsection has a properly-associated<label>from translation. - The
LanguageSwitcherusesrole="listbox"witharia-selectedon options, and setslangon each option's content so screen readers pronounce correctly. <html lang>is kept in sync; screen readers (VoiceOver, NVDA, JAWS) switch pronunciation profiles automatically.
# Static checks — parity + duplicate keys + on-disk folder mapping.
npm run i18n:check
# End-to-end Puppeteer sweep across every public route × 2 languages
# (asserts <html lang>, <h1>, <title>, no missing-key warnings).
# Requires the prod build (npm run build) and a working Puppeteer install.
npm run i18n:browserThe browser test loads every route with each language set in
localStorage and asserts that the page renders, <html lang> matches,
and the <h1> includes Bangla characters. Run it in CI to catch
"translation drifted" regressions.
Every page calls usePageMeta({ titleKey, descriptionKey }) with keys
from metadata.*. The hook resolves the keys via i18next and updates
<title>, <meta name="description">, <meta property="og:title">,
and <meta property="og:image"> on mount and on languageChanged.
Adding a new translatable page means adding a single entry under
src/locales/<lng>/metadata/metadata.json — no other config needed.
appriyo-website/
│
├── docs/
│ ├── 01-foundation/
│ ├── 02-product/
│ ├── 03-engineering/
│ ├── 04-operations/
│ ├── 05-legal/
│ └── 06-company/
│
├── public/
│ ├── images/
│ ├── icons/
│ └── logo/
│
├── src/
│ ├── components/
│ ├── sections/
│ ├── pages/
│ ├── data/
│ ├── styles/
│ ├── utils/
│ ├── i18n/ # i18next config + loader + hooks
│ ├── locales/ # Translation files, organised per language and namespace
│ └── App.jsx
│
├── .github/
│ ├── ISSUE_TEMPLATE/
│ ├── workflows/
│ ├── CODEOWNERS
│ └── PULL_REQUEST_TEMPLATE.md
│
├── README.md
├── LICENSE.txt
├── TEAMS.md
├── PRIVACY.md
├── TERMS.md
├── SECURITY.md
└── package.json
| Feature | Status |
|---|---|
| Fully Responsive Layout | ✅ Complete |
| Mobile & Tablet Optimization | ✅ Complete |
| Dark / Light Mode | ✅ Complete |
| Clean Typography & Spacing | ✅ Complete |
| Accessibility Improvements | 🔄 In Progress |
| Cross-Browser Compatibility | ✅ Complete |
The website is designed to communicate:
- Clarity
- Simplicity
- Professionalism
- Trust
- Practicality
- Long-term thinking
The UI intentionally avoids unnecessary complexity or excessive visual noise.
- Multi-page routing with React Router
- Dedicated product pages
- SEO optimization
- Blog & insights section
- AI automation case studies
- Improved animations & transitions
- Performance optimization
- Contact form backend integration
- CMS-powered content management
- Internationalization infrastructure (i18n runtime in place; per-component translation migration pending)
| Role | Team Member | Responsibilities |
|---|---|---|
| Development & Architecture | Shahajalal Mahmud | Software architecture, backend systems, technical planning |
| UI & Frontend | Preota Saha | UI/UX design, frontend systems, visual consistency |
| Testing & QA | Md Munna Sardar | Testing, QA processes, verification |
| Marketing & Branding | Hazera Islam Mim | Social media, branding, communication |
We operate as:
- A small, focused team
- Fast learners
- Builders first
- Problem-solvers first
- Long-term thinkers
| Detail | Information |
|---|---|
| Company Name | Appriyo Technologies |
| Industry | Software Solutions & Digital Systems |
| Location | Khulna, Bangladesh |
| Operating Model | Remote-first |
| contact@appriyo.com | |
| Phone | +880 1410394038 |
| File | Description |
|---|---|
TEAMS.md |
Team structure and responsibilities |
PRIVACY.md |
Privacy policy |
TERMS.md |
Terms of service |
SECURITY.md |
Security reporting policy |
LICENSE.txt |
Proprietary licensing |
| Template | Purpose |
|---|---|
bug_report.md |
Report bugs |
feature_request.md |
Suggest features |
security_vulnerability.md |
Report vulnerabilities |
PULL_REQUEST_TEMPLATE.md |
PR process and checklist |
CODEOWNERS |
Review ownership configuration |
Appriyo is currently maintained by the core internal team.
Team members should:
- Follow coding guidelines
- Use pull request templates
- Maintain code quality standards
- Keep documentation updated
We welcome:
- Bug reports
- Security disclosures
- Feedback
- Suggestions
Please use the provided GitHub issue templates.
Appriyo Proprietary License
Copyright (c) 2026 Appriyo.
All rights reserved.
This repository is proprietary software maintained by Appriyo.
You MAY:
- View the source code for educational purposes
- Fork for personal, non-commercial use
You MAY NOT:
- Use commercially without permission
- Redistribute modified versions
- Rebrand or claim ownership
- Use Appriyo branding without authorization
For licensing inquiries:
contact@appriyo.com
Appriyo exists to solve real-world problems, learn through execution, and build sustainable technology products that create practical value.
We are building Appriyo step by step through:
- Real work
- Real users
- Real learning
- Real execution
Our goal is not simply to build software.
Our goal is to build systems that genuinely improve how businesses operate.
| Platform | Link |
|---|---|
| Website | https://appriyo.com |
| GitHub | https://github.com/Appriyo |
| https://linkedin.com/company/appriyo | |
| contact@appriyo.com |