Codync
A free, open-source 1:1 alternative to Grok Bot and Muse. Message Claude Code, Codex, Cursor and 40+ coding agents as persistent bots from your iPhone, Mac or Linux desktop. Group chats, threads, appr
Know when your site breaks or slows down, what visitors were doing when it happened, and which change caused it. Apperio explains it in plain English and writes it up for whoever does the fixing.
Developer toolsGitHub @Orun-AyeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
A full-stack log aggregation + alerting platform for developers/teams, enriched with AI insights
Taken from the repository README
Loading the full README.
Read the full README ↗Apperio is a premium observability and logging platform that helps developers monitor, debug, and optimize their applications in real-time. This repository contains the frontend dashboard application — a responsive, modern web interface built with Next.js 15 and React 19 that provides comprehensive log analytics, error tracking, performance monitoring, and alert management.
Apperio Dashboard is the visual command center for managing your application observability. Monitor logs, errors, performance metrics, and configure sophisticated alert rules—all from one intuitive interface.
Live Deployments:
http://localhost:3000Related Repositories:
Apperio)| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.4.10 | App Router, server components, Turbopack |
| React | 19.1.0 | UI library with hooks and suspense |
| TypeScript | 5.x | Type-safe development |
| TailwindCSS | 4.x | Utility-first styling with custom Observatory design system |
| Zustand | 5.0.7 | Global state management (time range, selected project) |
| TanStack React Query | 5.84.1 | Data fetching, caching, server state management |
| Recharts | 2.15.4 | Interactive charting and data visualization |
| shadcn/ui | Latest | UI component library built on Radix primitives |
| GSAP | 3.14.2 | Advanced animations (NOT Framer Motion) |
| Fonts | Custom | Syne (display), DM Sans (body), Geist Mono (code) |
The frontend is deployed to Vercel and automatically builds on push to main:
https://www.apperio.dev
Environment Variables (Production):
NEXT_PUBLIC_API_BASE_URL=https://apperioserver.onrender.com/api/v1
http://localhost:3000
Environment Variables (Local):
NEXT_PUBLIC_API_BASE_URL=http://localhost:5000/api/v1
http://localhost:5000 (for local development)git clone https://github.com/Stanwukong/Apperio.git
cd Apperio/remote-logger
npm install
.env.local file:cp .env.example .env.local
.env.local:NEXT_PUBLIC_API_BASE_URL=http://localhost:5000/api/v1
Start the development server with Turbopack for fast refreshes:
npm run dev
Open http://localhost:3000 in your browser. The app will automatically reload when you make changes.
npm run build
npm run start
This creates an optimized production build and starts the server.
Create a .env.local file in the project root with the following variables:
# API Base URL (required)
NEXT_PUBLIC_API_BASE_URL=http://localhost:5000/api/v1
# Next.js/Vercel (optional)
NODE_ENV=development
Important Notes:
NEXT_PUBLIC_ are exposed to the browser/projects, /logs, etc.# Start development server with Turbopack
npm run dev
# Build for production
npm run build
# Start production server
npm run start
# Run ESLint
npm run lint
any unless absolutely necessary.PascalCase for components, camelCase for utilities and hooks.tsconfig.json).The codebase includes:
Run tests:
npm test
npm run test:e2e
remote-logger/
├── app/ # Next.js App Router
│ ├── (auth)/ # Authentication pages (unauthenticated)
│ │ ├── login/
│ │ ├── signup/
│ │ └── reset-password/
│ ├── (dashboard)/ # Main dashboard (protected by middleware)
│ │ ├── layout.tsx # Shared dashboard layout (sidebar, header)
│ │ ├── page.tsx # Dashboard overview
│ │ ├── projects/ # Project management
│ │ │ ├── page.tsx # Projects list
│ │ │ └── [id]/ # Per-project pages
│ │ │ ├── logs/
│ │ │ ├── errors/
│ │ │ ├── performance/
│ │ │ ├── web-vitals/
│ │ │ ├── network/
│ │ │ ├── interactions/
│ │ │ ├── console/
│ │ │ ├── pageviews/
│ │ │ ├── sessions/
│ │ │ ├── activity/
│ │ │ ├── traces/
│ │ │ ├── funnels/
│ │ │ ├── regressions/
│ │ │ ├── insights/
│ │ │ ├── settings/
│ │ │ └── source-maps/
│ │ ├── alerts/ # Alert management
│ │ │ ├── rules/
│ │ │ ├── events/
│ │ │ ├── analytics/
│ │ │ ├── escalation-policies/
│ │ │ └── maintenance-windows/
│ │ ├── custom-dashboards/ # User-configurable dashboards
│ │ └── settings/ # User settings, profile, preferences
│ ├── (landing)/ # Public landing page
│ │ └── page.tsx
│ ├── layout.tsx # Root layout
│ ├── error.tsx # Global error boundary
│ └── not-found.tsx # 404 page
│
├── components/ # Reusable React components (100+)
│ ├── shared/ # Shared across all pages
│ │ ├── PageHeader.tsx # Page title + actions header
│ │ ├── MetricCard.tsx # KPI cards with sparklines
│ │ ├── Sparkline.tsx # Tiny inline charts
│ │ ├── TimeSeriesChart.tsx # Main time-series visualization
│ │ ├── ObservatoryBarChart.tsx # Styled bar chart
│ │ ├── SignalDot.tsx # Status indicator dots
│ │ ├── TerminalBlock.tsx # Code/terminal display
│ │ ├── SectionHeading.tsx # Section title component
│ │ ├── SkeletonDashboard.tsx # Loading skeleton
│ │ └── ...
│ ├── ui/ # shadcn/ui primitives
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── badge.tsx
│ │ ├── input.tsx
│ │ ├── dialog.tsx
│ │ ├── dropdown-menu.tsx
│ │ ├── tabs.tsx
│ │ ├── table.tsx
│ │ ├── select.tsx
│ │ ├── switch.tsx
│ │ ├── checkbox.tsx
│ │ ├── popover.tsx
│ │ ├── tooltip.tsx
│ │ ├── alert.tsx
│ │ ├── accordion.tsx
│ │ ├── avatar.tsx
│ │ ├── progress.tsx
│ │ ├── separator.tsx
│ │ └── ...
│ ├── landing/ # Landing page components
│ │ ├── Hero.tsx # Hero section with CTA
│ │ ├── HeroCanvas.tsx # Interactive constellation canvas
│ │ ├── ProblemSection.tsx # Problem/value prop section
│ │ ├── BentoGrid.tsx # Feature grid layout
│ │ ├── StatsBar.tsx # Statistics display
│ │ ├── Pricing.tsx # Pricing table
│ │ ├── ClosingCTA.tsx # Final call-to-action
│ │ └── ...
│ ├── alerts/ # Alert-related components
│ │ ├── AlertRuleForm.tsx # Create/edit alert rules
│ │ ├── AlertRulesList.tsx # List of alert rules
│ │ ├── AlertEventsList.tsx # Triggered alert events
│ │ ├── AlertAnalytics.tsx # Alert trend charts
│ │ └── ...
│ ├── logs/ # Log explorer components
│ │ ├── LogExplorer.tsx # Main log filtering UI
│ │ ├── LogTable.tsx # Log entries table
│ │ ├── LogDetailPanel.tsx # Side panel with full log details
│ │ ├── LogFilters.tsx # Filter controls
│ │ ├── LogSearch.tsx # Full-text search
│ │ └── ...
│ └── dashboard/ # Dashboard-specific components
│ ├── DashboardGrid.tsx # Multi-project overview grid
│ ├── ProjectHealthCard.tsx # Per-project health indicator
│ ├── RecentAlertsWidget.tsx # Recent alerts list
│ └── ...
│
├── hooks/ # Custom React hooks + React Query hooks
│ ├── useTimeRange.ts # Global time range selector
│ ├── useSelectedProject.ts # Global selected project
│ ├── useDashboardData.ts # Main dashboard data fetching
│ ├── useAnalyticsData.ts # Analytics-specific queries
│ ├── useAlerts.ts # Alert management hooks
│ ├── useProjects.ts # Project CRUD hooks
│ ├── useCustomDashboards.ts # Custom dashboard hooks
│ ├── useGsapAnimations.ts # GSAP animation helper
│ └── ...
│
├── services/ # API integration layer (axios-based)
│ ├── config.ts # Axios instance with auth interceptor
│ ├── dashboard.service.ts # Dashboard endpoints
│ ├── logs.service.ts # Log endpoints
│ ├── alerts.service.ts # Alert endpoints
│ ├── projects.service.ts # Project CRUD endpoints
│ ├── users.service.ts # User auth endpoints
│ ├── custom-dashboards.service.ts # Custom dashboard endpoints
│ └── ...
│
├── store/ # Zustand global state
│ └── loghive-store.ts # Time range, selected project, preferences
│
├── lib/ # Utilities and helpers
│ ├── format-utils.ts # formatCompact, formatPercent, formatDuration, etc.
│ ├── chart-theme.ts # Observatory chart styling for Recharts
│ ├── query-client.ts # React Query configuration
│ ├── cn.ts # TailwindCSS class merging utility
│ ├── date-utils.ts # Date/time helpers
│ └── ...
│
├── types/ # TypeScript type definitions
│ ├── dashboard.ts # Dashboard types
│ ├── logs.ts # Log-related types
│ ├── alerts.ts # Alert types
│ ├── projects.ts # Project types
│ └── ...
│
├── app.tsx # Root component
├── globals.css # Global styles, CSS variables, Observatory tokens
├── globals-animations.css # CSS animations (signal-pulse, dot-grid)
├── tailwind.config.ts # TailwindCSS configuration
├── tsconfig.json # TypeScript configuration
├── next.config.js # Next.js configuration
├── package.json # Dependencies and scripts
└── README.md # This file
Apperio uses the Observatory design system — a dark-first, signal-focused design language optimized for monitoring and data visualization.
All colors are defined as CSS custom properties in globals.css and registered as Tailwind utilities:
Backgrounds (Dark Theme):
--void: #060b14 (darkest, base background)--base: #0b1220 (secondary background)--surface: #111c2e (card/component background)Accent Colors:
--signal: #00d97e (primary, signal green — used for highlights, call-to-action)--data: #4d8ef8 (secondary, data blue — charts, info)Status Tokens:
text-status-ok: Green (#10b981)text-status-warn: Yellow/Orange (#f59e0b)text-status-danger: Red (#ef4444)Log Level Tokens:
text-level-error, text-level-warn, text-level-info, text-level-debug, text-level-trace, text-level-fatalData Tokens:
text-data-info, text-data-purple, bg-data-info/10All components follow Observatory styling:
<SignalDot status="ok" />)In globals.css:
@theme inline block defining Tailwind utilities.dark applied by defaultIn globals-animations.css:
signal-pulse: Pulsing animation for active indicatorsdot-grid: Animated background grid (for landing page)Components follow a layered architecture:
app/**): Route handlers, data fetching with Suspensecomponents/ui): shadcn/ui building blocksPage Component
↓
React Query Hook (useQuery)
↓
Service Layer (axios)
↓
Backend API
↓
MongoDB / Redis
Global State (Zustand):
Server State (React Query):
Component State (React Hooks):
middleware.ts) validates on every requestAuthorization: Bearer <token> header/loginWebSocket connections for live log streaming:
Frontend
↓ (WebSocket upgrade with JWT)
Backend WebSocket Server
↓
Redis (Pub/Sub)
↓
All connected clients receive updates
WebSocket not available on Vercel (serverless), falls back to polling.
react-window for large lists (10k+ rows)next/image componentAll API calls go through the services/ layer:
Example: Fetch logs
// services/logs.service.ts
export const fetchLogs = (projectId: string, filters: LogFilters) => {
return api.get(`/${projectId}/logs`, { params: filters });
};
// hooks/useLogs.ts (React Query wrapper)
export const useLogs = (projectId: string, filters: LogFilters) => {
return useQuery({
queryKey: ['logs', projectId, filters],
queryFn: () => fetchLogs(projectId, filters),
});
};
// Usage in component
const { data, isLoading, error } = useLogs(projectId, filters);
API Base URL Configuration:
The API base URL is set via the NEXT_PUBLIC_API_BASE_URL environment variable in the axios config (services/config.ts):
const baseURL = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:5000/api/v1';
git checkout -b feature/descriptionnpm run devnpm run buildIf you encounter bugs or have feature requests:
This project is proprietary and confidential. Unauthorized copying or distribution is prohibited.
Questions? Open an issue or contact the development team.