first commit
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import jwt from 'jsonwebtoken';
|
||||
|
||||
const JWT_SECRET = process.env.JWT_SECRET || 'dev-secret-change-in-production';
|
||||
const JWT_EXPIRY = '24h';
|
||||
|
||||
export function signToken(username) {
|
||||
return jwt.sign({ username }, JWT_SECRET, { expiresIn: JWT_EXPIRY });
|
||||
}
|
||||
|
||||
export function verifyToken(token) {
|
||||
return jwt.verify(token, JWT_SECRET);
|
||||
}
|
||||
|
||||
export function requireAuth(req, res, next) {
|
||||
const header = req.headers.authorization;
|
||||
if (!header?.startsWith('Bearer ')) {
|
||||
return res.status(401).json({ error: 'Authentication required', code: 'UNAUTHORIZED' });
|
||||
}
|
||||
|
||||
try {
|
||||
req.user = verifyToken(header.slice(7));
|
||||
next();
|
||||
} catch {
|
||||
return res.status(401).json({ error: 'Invalid or expired token', code: 'UNAUTHORIZED' });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import bcrypt from 'bcryptjs';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const DATA_DIR = process.env.DATA_DIR || path.join(__dirname, 'data');
|
||||
const CONTENT_FILE = path.join(DATA_DIR, 'content.json');
|
||||
const ADMIN_FILE = path.join(DATA_DIR, 'admin.json');
|
||||
const SEED_FILE = path.join(__dirname, 'seed', 'default-content.json');
|
||||
|
||||
function ensureDataDir() {
|
||||
if (!fs.existsSync(DATA_DIR)) {
|
||||
fs.mkdirSync(DATA_DIR, { recursive: true });
|
||||
}
|
||||
}
|
||||
|
||||
function readJson(filePath, fallback = null) {
|
||||
if (!fs.existsSync(filePath)) return fallback;
|
||||
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
}
|
||||
|
||||
function writeJson(filePath, data) {
|
||||
ensureDataDir();
|
||||
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
|
||||
}
|
||||
|
||||
export function initDb() {
|
||||
ensureDataDir();
|
||||
|
||||
if (!fs.existsSync(CONTENT_FILE)) {
|
||||
const seed = readJson(SEED_FILE);
|
||||
writeJson(CONTENT_FILE, { ...seed, updatedAt: new Date().toISOString() });
|
||||
console.log('Seeded content database from default-content.json');
|
||||
}
|
||||
|
||||
if (!fs.existsSync(ADMIN_FILE)) {
|
||||
const password = process.env.ADMIN_PASSWORD || 'admin123';
|
||||
const hash = bcrypt.hashSync(password, 12);
|
||||
writeJson(ADMIN_FILE, {
|
||||
username: process.env.ADMIN_USERNAME || 'admin',
|
||||
passwordHash: hash,
|
||||
});
|
||||
console.log(`Admin user created (username: ${process.env.ADMIN_USERNAME || 'admin'})`);
|
||||
}
|
||||
}
|
||||
|
||||
export function getContent() {
|
||||
const data = readJson(CONTENT_FILE, {});
|
||||
const { updatedAt, ...content } = data;
|
||||
return { content, updatedAt };
|
||||
}
|
||||
|
||||
export function getFullContentRecord() {
|
||||
return readJson(CONTENT_FILE, {});
|
||||
}
|
||||
|
||||
export function updateSection(section, sectionData) {
|
||||
const record = getFullContentRecord();
|
||||
record[section] = sectionData;
|
||||
record.updatedAt = new Date().toISOString();
|
||||
writeJson(CONTENT_FILE, record);
|
||||
return record.updatedAt;
|
||||
}
|
||||
|
||||
export function updateAllContent(content) {
|
||||
const record = { ...content, updatedAt: new Date().toISOString() };
|
||||
writeJson(CONTENT_FILE, record);
|
||||
return record.updatedAt;
|
||||
}
|
||||
|
||||
export function getAdmin() {
|
||||
return readJson(ADMIN_FILE);
|
||||
}
|
||||
|
||||
export function updateAdminPassword(passwordHash) {
|
||||
const admin = getAdmin();
|
||||
admin.passwordHash = passwordHash;
|
||||
writeJson(ADMIN_FILE, admin);
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'dotenv/config';
|
||||
import express from 'express';
|
||||
import cors from 'cors';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { initDb } from './db.js';
|
||||
import authRoutes from './routes/auth.js';
|
||||
import contentRoutes from './routes/content.js';
|
||||
import uploadRoutes from './routes/upload.js';
|
||||
import multer from 'multer';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const PORT = process.env.PORT || 3001;
|
||||
const UPLOAD_DIR = process.env.UPLOAD_DIR || path.join(__dirname, 'uploads');
|
||||
|
||||
initDb();
|
||||
|
||||
const app = express();
|
||||
|
||||
app.use(cors({
|
||||
origin: process.env.CORS_ORIGIN || true,
|
||||
credentials: true,
|
||||
}));
|
||||
|
||||
app.use(express.json({ limit: '10mb' }));
|
||||
app.use('/uploads', express.static(UPLOAD_DIR));
|
||||
|
||||
app.get('/api/health', (_req, res) => {
|
||||
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
||||
});
|
||||
|
||||
app.use('/api/auth', authRoutes);
|
||||
app.use('/api/content', contentRoutes);
|
||||
app.use('/api/upload', uploadRoutes);
|
||||
|
||||
app.use((err, _req, res, _next) => {
|
||||
if (err instanceof multer.MulterError && err.code === 'LIMIT_FILE_SIZE') {
|
||||
return res.status(413).json({ error: 'File too large (max 50MB)', code: 'FILE_TOO_LARGE' });
|
||||
}
|
||||
console.error(err);
|
||||
res.status(500).json({ error: err.message || 'Internal server error', code: 'SERVER_ERROR' });
|
||||
});
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`API server running on http://localhost:${PORT}`);
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
import { Router } from 'express';
|
||||
import bcrypt from 'bcryptjs';
|
||||
import { getAdmin, updateAdminPassword } from '../db.js';
|
||||
import { requireAuth, signToken } from '../auth.js';
|
||||
|
||||
const router = Router();
|
||||
const loginAttempts = new Map();
|
||||
|
||||
function checkRateLimit(ip) {
|
||||
const now = Date.now();
|
||||
const record = loginAttempts.get(ip) || { count: 0, resetAt: now + 60000 };
|
||||
if (now > record.resetAt) {
|
||||
loginAttempts.set(ip, { count: 1, resetAt: now + 60000 });
|
||||
return true;
|
||||
}
|
||||
if (record.count >= 5) return false;
|
||||
record.count++;
|
||||
loginAttempts.set(ip, record);
|
||||
return true;
|
||||
}
|
||||
|
||||
router.post('/login', (req, res) => {
|
||||
const ip = req.ip;
|
||||
if (!checkRateLimit(ip)) {
|
||||
return res.status(429).json({ error: 'Too many login attempts', code: 'RATE_LIMITED' });
|
||||
}
|
||||
|
||||
const { username, password } = req.body;
|
||||
if (!username || !password) {
|
||||
return res.status(400).json({ error: 'Username and password required', code: 'VALIDATION' });
|
||||
}
|
||||
|
||||
const admin = getAdmin();
|
||||
if (!admin || username !== admin.username || !bcrypt.compareSync(password, admin.passwordHash)) {
|
||||
return res.status(401).json({ error: 'Invalid credentials', code: 'UNAUTHORIZED' });
|
||||
}
|
||||
|
||||
const token = signToken(username);
|
||||
const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
|
||||
res.json({ token, expiresAt });
|
||||
});
|
||||
|
||||
router.get('/me', requireAuth, (req, res) => {
|
||||
res.json({ username: req.user.username });
|
||||
});
|
||||
|
||||
router.put('/password', requireAuth, (req, res) => {
|
||||
const { currentPassword, newPassword } = req.body;
|
||||
if (!currentPassword || !newPassword || newPassword.length < 6) {
|
||||
return res.status(400).json({ error: 'Valid current and new password (min 6 chars) required', code: 'VALIDATION' });
|
||||
}
|
||||
|
||||
const admin = getAdmin();
|
||||
if (!bcrypt.compareSync(currentPassword, admin.passwordHash)) {
|
||||
return res.status(401).json({ error: 'Current password is incorrect', code: 'UNAUTHORIZED' });
|
||||
}
|
||||
|
||||
updateAdminPassword(bcrypt.hashSync(newPassword, 12));
|
||||
res.json({ message: 'Password updated' });
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,30 @@
|
||||
import { Router } from 'express';
|
||||
import { getContent, updateSection, updateAllContent } from '../db.js';
|
||||
import { requireAuth } from '../auth.js';
|
||||
import seedContent from '../seed/default-content.json' with { type: 'json' };
|
||||
|
||||
const VALID_SECTIONS = Object.keys(seedContent);
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/', (_req, res) => {
|
||||
const { content, updatedAt } = getContent();
|
||||
res.json({ ...content, _updatedAt: updatedAt });
|
||||
});
|
||||
|
||||
router.put('/', requireAuth, (req, res) => {
|
||||
const { _updatedAt, ...content } = req.body;
|
||||
const updatedAt = updateAllContent(content);
|
||||
res.json({ message: 'Content updated', updatedAt });
|
||||
});
|
||||
|
||||
router.put('/:section', requireAuth, (req, res) => {
|
||||
const { section } = req.params;
|
||||
if (!VALID_SECTIONS.includes(section)) {
|
||||
return res.status(404).json({ error: `Unknown section: ${section}`, code: 'NOT_FOUND' });
|
||||
}
|
||||
const updatedAt = updateSection(section, req.body);
|
||||
res.json({ message: `${section} updated`, updatedAt });
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,49 @@
|
||||
import { Router } from 'express';
|
||||
import multer from 'multer';
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { requireAuth } from '../auth.js';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const UPLOAD_DIR = process.env.UPLOAD_DIR || path.join(__dirname, '..', 'uploads');
|
||||
|
||||
if (!fs.existsSync(UPLOAD_DIR)) {
|
||||
fs.mkdirSync(UPLOAD_DIR, { recursive: true });
|
||||
}
|
||||
|
||||
const storage = multer.diskStorage({
|
||||
destination: (_req, _file, cb) => cb(null, UPLOAD_DIR),
|
||||
filename: (_req, file, cb) => {
|
||||
const ext = path.extname(file.originalname).toLowerCase();
|
||||
const base = path.basename(file.originalname, ext).replace(/[^a-zA-Z0-9-_]/g, '_').slice(0, 50);
|
||||
cb(null, `${base}-${Date.now()}${ext}`);
|
||||
},
|
||||
});
|
||||
|
||||
const upload = multer({
|
||||
storage,
|
||||
limits: { fileSize: 50 * 1024 * 1024 },
|
||||
fileFilter: (_req, file, cb) => {
|
||||
const allowed = /^image\/|^video\/mp4$/;
|
||||
if (allowed.test(file.mimetype)) cb(null, true);
|
||||
else cb(new Error('Only images and MP4 videos are allowed'));
|
||||
},
|
||||
});
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.post('/', requireAuth, upload.single('file'), (req, res) => {
|
||||
if (!req.file) {
|
||||
return res.status(400).json({ error: 'No file uploaded', code: 'VALIDATION' });
|
||||
}
|
||||
res.json({ url: `/uploads/${req.file.filename}`, filename: req.file.filename });
|
||||
});
|
||||
|
||||
router.delete('/:filename', requireAuth, (req, res) => {
|
||||
const filePath = path.join(UPLOAD_DIR, path.basename(req.params.filename));
|
||||
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
|
||||
res.json({ message: 'File deleted' });
|
||||
});
|
||||
|
||||
export default router;
|
||||
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"site": {
|
||||
"title": "Cavin Infotech | One Trusted Technology Partner",
|
||||
"logo": "/assets/cavin_logo.svg",
|
||||
"copyright": "Copyrights reserved to CAVIN INFOTECH"
|
||||
},
|
||||
"navigation": [
|
||||
{ "label": "Home", "href": "#home", "type": "hash" },
|
||||
{ "label": "About Us", "href": "#aboutus", "type": "hash" },
|
||||
{ "label": "Products", "href": "#products", "type": "hash" },
|
||||
{ "label": "Careers", "href": "#careers", "type": "modal" },
|
||||
{ "label": "Contact Us", "href": "#contactus", "type": "hash" }
|
||||
],
|
||||
"hero": {
|
||||
"video": "/assets/Citpl Hero Dubai(1).mp4",
|
||||
"badge": "Chennai & Dubai • Trusted by 100+ Clients",
|
||||
"headline": "Infinite Possibilities",
|
||||
"subheadline": "One Trusted Technology Partner"
|
||||
},
|
||||
"metrics": [
|
||||
{ "value": "100+", "label": "Clients" },
|
||||
{ "value": "5+", "label": "Years of Global Operations" },
|
||||
{ "value": "4", "label": "Group Companies" },
|
||||
{ "value": "2", "label": "Global Offices" }
|
||||
],
|
||||
"about": {
|
||||
"heading": "Trusted Technology Partner",
|
||||
"badgeImage": "/assets/frost_sullivan.svg",
|
||||
"badgeAlt": "Frost & Sullivan Logo",
|
||||
"backgroundImage": "/assets/partner_bg.png"
|
||||
},
|
||||
"partners": {
|
||||
"heading": "Trusted By Leaders",
|
||||
"subheading": "from various industries",
|
||||
"body": "Professionals Trust Our Solutions And Complete Their Journeys.",
|
||||
"logos": [
|
||||
{ "name": "CavinKare", "image": "/assets/Frame 27.svg" },
|
||||
{ "name": "Valeo", "image": "/assets/Frame 28.svg" },
|
||||
{ "name": "Polyhose", "image": "/assets/Frame 30.svg" },
|
||||
{ "name": "ACA Global", "image": "/assets/Frame 31.svg" },
|
||||
{ "name": "Dawn Pictures", "image": "/assets/Frame 32.svg" },
|
||||
{ "name": "MRF", "image": "/assets/Frame 33.svg" },
|
||||
{ "name": "Chola MS", "image": "/assets/Frame 34.svg" },
|
||||
{ "name": "Hero", "image": "/assets/Frame 35.svg" },
|
||||
{ "name": "BorgWarner", "image": "/assets/Frame 36.svg" },
|
||||
{ "name": "KONE", "image": "/assets/kone.png" }
|
||||
]
|
||||
},
|
||||
"certifications": {
|
||||
"heading": "Certified to build what enterprises trust",
|
||||
"items": [
|
||||
{ "image": "/assets/cert_iso_27001.png", "alt": "ISO 27001:2022 Certification" },
|
||||
{ "image": "/assets/cert_iso_9001.png", "alt": "ISO 9001:2015 Certification" },
|
||||
{ "image": "/assets/cert_soc.png", "alt": "SOC Certification" },
|
||||
{ "image": "/assets/nasscom.png", "alt": "Nasscom Member Logo" },
|
||||
{ "image": "/assets/cert_gptw_2026.png", "alt": "Great Place to Work Certified 2026 INDIA" }
|
||||
]
|
||||
},
|
||||
"services": {
|
||||
"eyebrow": "TECHNOLOGY THAT MOVES YOUR BUSINESS FORWARD.",
|
||||
"title": "Our Services",
|
||||
"intro": "From market leaders to high-growth innovators, enterprises trust Cavin Infotech to deliver secure, scalable, and future-ready digital solutions that create measurable business value.",
|
||||
"items": [
|
||||
{
|
||||
"id": "ai-data-services",
|
||||
"number": "01",
|
||||
"title": "AI & Data Services",
|
||||
"boldStatement": "Your Data, Unlocked.",
|
||||
"description": "Harness Generative AI, Agentic AI, and predictive analytics to automate complex workflows, predict market shifts, and unlock hidden revenue — powered by modern AI architectures.",
|
||||
"capabilities": ["Generative AI & LLM Solutions", "Agentic AI & Autonomous Systems", "Predictive Analytics & Forecasting", "Conversational AI & Enterprise Assistants"],
|
||||
"cta": "Explore AI Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(255, 120, 0, 0.15) 0%, rgba(2, 7, 16, 0) 70%)",
|
||||
"borderColor": "rgba(255, 120, 0, 0.12)"
|
||||
},
|
||||
{
|
||||
"id": "sap-managed-services",
|
||||
"number": "02",
|
||||
"title": "SAP Managed Services",
|
||||
"boldStatement": "SAP That Works. So You Can Focus.",
|
||||
"description": "Certified SAP consultants delivering functional expertise, ABAP development, security, upgrades, and license optimization — keeping your enterprise running smooth and audit-ready.",
|
||||
"capabilities": ["SAP Functional Consulting", "SAP ABAP Development", "SAP Security & Compliance", "SAP Upgrades & Optimization"],
|
||||
"cta": "Explore SAP Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(0, 240, 255, 0.15) 0%, rgba(2, 7, 16, 0) 70%)",
|
||||
"borderColor": "rgba(0, 240, 255, 0.12)"
|
||||
},
|
||||
{
|
||||
"id": "enterprise-development",
|
||||
"number": "03",
|
||||
"title": "Enterprise Development",
|
||||
"boldStatement": "Built to Scale With You.",
|
||||
"description": "Custom enterprise applications that modernize legacy workflows, connect business systems, and deliver reliable digital operations as your organization evolves.",
|
||||
"capabilities": ["Custom Enterprise Applications", "Mobile & Web Platforms", "Modernization of Legacy Systems", "Workflow Automation"],
|
||||
"cta": "Explore Enterprise Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(59, 130, 246, 0.12) 0%, rgba(255, 120, 0, 0.08) 50%, rgba(2, 7, 16, 0) 100%)",
|
||||
"borderColor": "rgba(59, 130, 246, 0.12)"
|
||||
},
|
||||
{
|
||||
"id": "architecture-as-a-service",
|
||||
"number": "04",
|
||||
"title": "Architecture as a Service",
|
||||
"boldStatement": "Design the Foundation Before You Build.",
|
||||
"description": "We help businesses define scalable technology architecture, integration models, cloud strategy, and modernization roadmaps before execution begins.",
|
||||
"capabilities": ["Enterprise Architecture", "Solution Architecture", "Cloud Architecture", "Integration Architecture"],
|
||||
"cta": "Explore Architecture Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(29, 78, 216, 0.15) 0%, rgba(2, 7, 16, 0) 70%)",
|
||||
"borderColor": "rgba(29, 78, 216, 0.12)"
|
||||
},
|
||||
{
|
||||
"id": "smart-factory-iot",
|
||||
"number": "05",
|
||||
"title": "Smart Factory / Industrial IoT",
|
||||
"boldStatement": "Make Operations Visible, Connected, and Intelligent.",
|
||||
"description": "Connect machines, sensors, production systems, and dashboards to enable real-time monitoring, predictive maintenance, and smarter factory decisions.",
|
||||
"capabilities": ["Industrial IoT Integration", "Real-Time Machine Monitoring", "Predictive Maintenance", "Factory Dashboards"],
|
||||
"cta": "Explore Smart Factory Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(255, 120, 0, 0.08) 0%, rgba(59, 130, 246, 0.08) 50%, rgba(2, 7, 16, 0) 100%)",
|
||||
"borderColor": "rgba(255, 120, 0, 0.1)"
|
||||
},
|
||||
{
|
||||
"id": "ar-vr-solutions-digifox",
|
||||
"number": "06",
|
||||
"title": "AR/VR Solutions — DigiFox",
|
||||
"boldStatement": "Immersive Experiences for Training, Learning, and Visualization.",
|
||||
"description": "Create virtual environments, simulations, AR product experiences, and immersive learning platforms that improve engagement, understanding, and retention.",
|
||||
"capabilities": ["VR Training Simulations", "AR Product Visualization", "Immersive Learning Experiences", "3D Interaction Design"],
|
||||
"cta": "Explore DigiFox Solutions",
|
||||
"glowColor": "radial-gradient(circle at bottom right, rgba(139, 92, 246, 0.15) 0%, rgba(2, 7, 16, 0) 70%)",
|
||||
"borderColor": "rgba(139, 92, 246, 0.12)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"whyUs": {
|
||||
"eyebrow": "Why Cavin Infotech",
|
||||
"title": "Designed For High Scalability",
|
||||
"cards": [
|
||||
{
|
||||
"title": "Innovation Driven",
|
||||
"description": "We deliver future-ready solutions powered by Gen AI, Agentic AI, automation, IoT, and emerging tech that keep you ahead of the curve."
|
||||
},
|
||||
{
|
||||
"title": "Industry Expertise",
|
||||
"description": "Deep domain knowledge across manufacturing, enterprise tech, smart manufacturing, and digital operations built from years of real-world implementation."
|
||||
},
|
||||
{
|
||||
"title": "Secure & Reliable",
|
||||
"description": "Every solution is built on globally recognized standards with uncompromising focus on security, compliance, and operational excellence."
|
||||
},
|
||||
{
|
||||
"title": "Outcome Focused",
|
||||
"description": "We don't just implement technology we design every solution to reduce complexity, boost efficiency, and deliver clear, measurable business impact."
|
||||
}
|
||||
],
|
||||
"images": [
|
||||
{ "src": "/assets/whyus_arab_meeting.jpg", "alt": "Corporate collaboration" },
|
||||
{ "src": "/assets/whyus_vr_man.jpg", "alt": "VR technology" },
|
||||
{ "src": "/assets/whyus_hologram.jpg", "alt": "Hologram technology" }
|
||||
]
|
||||
},
|
||||
"gallery": {
|
||||
"eyebrow": "Featured Gallery",
|
||||
"title": "Real Transformations. Proven Business Outcomes.",
|
||||
"subtitle": "From transformation stories to team innovation, explore how we build future-ready experiences.",
|
||||
"items": [
|
||||
{ "id": 1, "title": "Relentless Brand Growth & Innovation", "category": "Case Study", "excerpt": "Discover how we engineered a scalable digital platform that boosted brand engagement by 150% and accelerated global market reach.", "image": "https://images.unsplash.com/photo-1460925895917-afdab827c52f?auto=format&fit=crop&w=800&q=80", "readTime": "5 Min Read" },
|
||||
{ "id": 2, "title": "How We Transformed Billing at TTK", "category": "Transformation", "excerpt": "Transitioning legacy paper billing to an automated IoT-driven workflow, reducing checkout delays and improving customer satisfaction.", "image": "https://images.unsplash.com/photo-1554224155-8d04cb21cd6c?auto=format&fit=crop&w=800&q=80", "readTime": "8 Min Read" },
|
||||
{ "id": 3, "title": "How We Transformed Retail Operations", "category": "Retail", "excerpt": "Unifying online inventory with physical retail networks, enabling smart warehouse tracking and seamless order fulfillment.", "image": "https://images.unsplash.com/photo-1556742049-0cfed4f6a45d?auto=format&fit=crop&w=800&q=80", "readTime": "6 Min Read" },
|
||||
{ "id": 4, "title": "How We Transformed Enterprise Workflows", "category": "Workflow", "excerpt": "Re-engineering internal communication channels and operations with Gen AI assistants, saving thousands of operational hours.", "image": "https://images.unsplash.com/photo-1531538606174-0f90ff5dce83?auto=format&fit=crop&w=800&q=80", "readTime": "10 Min Read" },
|
||||
{ "id": 5, "title": "Digital Product Showcase", "category": "Showcase", "excerpt": "A curation of sleek web interfaces, user-centric mobile applications, and custom enterprise portals designed by our UI/UX experts.", "image": "https://images.unsplash.com/photo-1507238691740-187a5b1d37b8?auto=format&fit=crop&w=800&q=80", "readTime": "7 Min Read" },
|
||||
{ "id": 6, "title": "Innovation Lab", "category": "Innovation", "excerpt": "Step inside our workshop where we prototype Agentic AI, smart hardware sensors, and computer vision systems for next-generation industries.", "image": "https://images.unsplash.com/photo-1485827404703-89b55fcc595e?auto=format&fit=crop&w=800&q=80", "readTime": "12 Min Read" }
|
||||
]
|
||||
},
|
||||
"products": {
|
||||
"eyebrow": "Our Products Suite",
|
||||
"title": "Powering Digital Growth",
|
||||
"subtitle": "Powerful products built to simplify operations, improve visibility, and accelerate digital growth.",
|
||||
"items": [
|
||||
{
|
||||
"name": "Prodmax",
|
||||
"description": "AI-powered Industrial IoT platform for smart manufacturing delivering real-time monitoring, advanced analytics, traceability, and operational intelligence.",
|
||||
"image": "/assets/prodmax_dashboard.png",
|
||||
"stats": [
|
||||
{ "value": "5%+", "label": "OEE Improvement" },
|
||||
{ "value": "15%", "label": "Reduction in Downtime" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "EVIDO",
|
||||
"description": "Intelligent audit management platform that standardizes inspections, automates issue tracking, and provides complete operational visibility.",
|
||||
"image": "/assets/evido_dashboard.png",
|
||||
"stats": [
|
||||
{ "value": "60%", "label": "Faster Process Automation" },
|
||||
{ "value": "24/7", "label": "AI Driven Assistance" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Budgie - HRMS",
|
||||
"description": "Modern workforce management platform that simplifies employee operations, boosts engagement, and streamlines organizational processes.",
|
||||
"image": "/assets/budgie_dashboard.png",
|
||||
"stats": [
|
||||
{ "value": "40%", "label": "HR Operations Efficiency" },
|
||||
{ "value": "99.8%", "label": "Payroll Accuracy" }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"insights": {
|
||||
"title": "Explore the Latest in Technology & Innovation",
|
||||
"subtitle": "Stay ahead with insights, stories, and updates on digital transformation, AI, automation, product design, and enterprise technology.",
|
||||
"items": [
|
||||
{ "category": "AI & Analytics", "title": "How AI is Reshaping Enterprise Decision Making", "date": "June 15, 2026", "image": "https://images.unsplash.com/photo-1620712943543-bcc4688e7485?auto=format&fit=crop&w=800&q=80", "excerpt": "Explore how deep learning models and agentic decision trees are replacing traditional business intelligence systems to drive proactive operations." },
|
||||
{ "category": "Digital Strategy", "title": "Why Digital Transformation Needs More Than Technology", "date": "June 02, 2026", "image": "https://images.unsplash.com/photo-1519389950473-47ba0277781c?auto=format&fit=crop&w=800&q=80", "excerpt": "Technology is only half the battle. True organizational agility requires architectural alignment, structural changes, and cultural evolution." },
|
||||
{ "category": "Product Design", "title": "Designing Enterprise Software Users Actually Love", "date": "May 18, 2026", "image": "https://images.unsplash.com/photo-1586717791821-3f44a563fa4c?auto=format&fit=crop&w=800&q=80", "excerpt": "Applying consumer-grade user experience principles to complex B2B systems reduces training costs and accelerates daily workflows." },
|
||||
{ "category": "Automation", "title": "The Future of Automation in Business Workflows", "date": "May 05, 2026", "image": "https://images.unsplash.com/photo-1485827404703-89b55fcc595e?auto=format&fit=crop&w=800&q=80", "excerpt": "From robotic process automation (RPA) to generative AI pipelines, learn how workflow automation is changing modern business scaling." },
|
||||
{ "category": "Cloud Architecture", "title": "Building Scalable Cloud-Native Infrastructure for Enterprises", "date": "April 22, 2026", "image": "https://images.unsplash.com/photo-1544197150-b99a580bb7a8?auto=format&fit=crop&w=800&q=80", "excerpt": "Microservices, Kubernetes, and serverless patterns are redefining how large-scale enterprise systems handle performance at unpredictable loads." },
|
||||
{ "category": "Cybersecurity", "title": "Zero Trust Security Models in the Age of Remote Work", "date": "April 08, 2026", "image": "https://images.unsplash.com/photo-1563986768494-4dee2763ff3f?auto=format&fit=crop&w=800&q=80", "excerpt": "As perimeter-based security crumbles, zero trust frameworks enforce identity verification at every layer — from endpoint to data center." },
|
||||
{ "category": "Data Engineering", "title": "Real-Time Data Pipelines That Power Smarter Decisions", "date": "March 25, 2026", "image": "https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&w=800&q=80", "excerpt": "Event-driven architectures and streaming platforms like Apache Kafka enable organizations to act on data the moment it is generated." }
|
||||
]
|
||||
},
|
||||
"footer": {
|
||||
"cta": {
|
||||
"headline": "Ready to Accelerate Your Digital Transformation Journey?",
|
||||
"body": "Whether you're exploring AI solutions, smart manufacturing, enterprise software, immersive technologies, or full-scale digital transformation, our experts are ready to help you build scalable solutions that deliver real business outcomes.",
|
||||
"image": "/assets/Footer CTA Section.png",
|
||||
"primaryButton": "Schedule a Consultation",
|
||||
"secondaryButton": "Request a Product Demo"
|
||||
},
|
||||
"quickLinks": [
|
||||
{ "label": "Home", "href": "#home" },
|
||||
{ "label": "About Us", "href": "#certifications" },
|
||||
{ "label": "Our Services", "href": "#services" }
|
||||
],
|
||||
"productLinks": [
|
||||
{ "label": "PRODMAX", "href": "#products" },
|
||||
{ "label": "Budgie HRMS", "href": "#products" },
|
||||
{ "label": "EVIDO", "href": "#products" }
|
||||
],
|
||||
"social": [
|
||||
{ "platform": "Facebook", "url": "#" },
|
||||
{ "platform": "Instagram", "url": "#" },
|
||||
{ "platform": "LinkedIn", "url": "#" },
|
||||
{ "platform": "Telegram", "url": "#" },
|
||||
{ "platform": "WhatsApp", "url": "#" },
|
||||
{ "platform": "X", "url": "#" },
|
||||
{ "platform": "YouTube", "url": "#" }
|
||||
],
|
||||
"legal": [
|
||||
{ "label": "Privacy Policy", "href": "#" },
|
||||
{ "label": "Terms & Conditions", "href": "#" }
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user