Event CRM · AWS infrastructure · Multi-role operations

CampOps — Event Management CRM

Cloud-native platform that streamlines event planning, volunteer coordination, sponsor management, and attendee engagement. Built with Next.js, Node.js, TypeScript, PostgreSQL, and deep AWS integrations for scalability, security, and performance.

Maruf Hossainco-authored withGemini 1.5 Pro (Google)

15+

Features

10+ Tools

Tech Stack

8+ Services

AWS Services

48 Hours

Build Time

CampOps dashboard showing project analytics and task distribution
CampOps Apollo project board with kanban view

Technology Stack

Frontend

Next.js 16
React 19
Tailwind CSS 4
RTK + RTK Query

Backend & Infra

Node 18 • Express 5
Prisma 6
AWS Cognito
RDS Postgres 15

Executive Summary

CampOps centralizes events, volunteers, sponsors, RSVPs and tasks in one place, with AI-powered risk analysis and automated communications. Built during a hackathon with AWS cloud-native architecture, showcasing full-stack development, authentication, and scalable infrastructure design.

AWS CloudFront CDN
        │
   AWS Amplify (Next.js)   ─────  AWS Cognito (Auth)
        │
   Application Load Balancer
        │
    EC2 Auto Scaling Group (Express API)
        │
      Amazon RDS (PostgreSQL)

   S3 (Attachments • Static Assets)
   Secrets Manager • CloudWatch • SNS • SES • Route 53

Key Features

Event Ops

  • Multiple views: Board, List, Table, Timeline, Details
  • Status tracking, capacity, waitlists, check-ins
  • Global search + advanced filtering

Teams & Roles

  • Multi-org support, RBAC (admin/organizer/volunteer)
  • Real-time collaboration and profiles

AI & Automation

  • Risk detection: low RSVPs, overdue/unassigned critical tasks
  • Actionable suggestions, severity levels
  • Automated emails: reminders, assignments, thank-yous

Sponsors & Comms

  • Pipeline stages, pledges and payments
  • Template-driven personalized emails

Selected Implementation

1) S3 Upload Service

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const s3Client = new S3Client({ region: 'us-east-1' });

export async function uploadAttachment(file: Buffer, fileName: string) {
  const command = new PutObjectCommand({
    Bucket: process.env.S3_ATTACHMENTS_BUCKET,
    Key: `attachments/${Date.now()}-${fileName}`,
    Body: file,
    ContentType: getContentType(fileName),
  });

  await s3Client.send(command);
  return getSignedUrl(s3Client, command, { expiresIn: 900 });
}

2) Cognito Auth (USER_PASSWORD_AUTH)

import { CognitoIdentityProviderClient, InitiateAuthCommand } from '@aws-sdk/client-cognito-identity-provider';

const cognitoClient = new CognitoIdentityProviderClient({ region: 'us-east-1' });

export async function authenticateUser(email: string, password: string) {
  const command = new InitiateAuthCommand({
    ClientId: process.env.COGNITO_CLIENT_ID!,
    AuthFlow: 'USER_PASSWORD_AUTH',
    AuthParameters: { USERNAME: email, PASSWORD: password },
  });

  const res = await cognitoClient.send(command);
  return {
    accessToken: res.AuthenticationResult?.AccessToken,
    idToken: res.AuthenticationResult?.IdToken,
    refreshToken: res.AuthenticationResult?.RefreshToken,
  };
}

3) RTK Query Base API

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const api = createApi({
  baseQuery: fetchBaseQuery({
    baseUrl: process.env.NEXT_PUBLIC_API_BASE_URL,
    prepareHeaders: (headers, { getState }) => {
      const token = (getState() as any).auth.token;
      if (token) headers.set('authorization', `Bearer ${token}");
      return headers;
    },
  }),
  endpoints: (builder) => ({
    getProjects: builder.query<any[], void>({ query: () => '/projects' }),
    // ...
  }),
});

4) Prisma Schema Highlights

model Event {
  id           Int       @id @default(autoincrement())
  orgId        Int
  title        String
  startsAt     DateTime
  endsAt       DateTime
  location     String?
  status       String
  capacity     Int?
  rsvps        RSVP[]
  volunteerTasks VolunteerTask[]
}

model VolunteerTask {
  id               Int      @id @default(autoincrement())
  title            String
  status           String
  priority         String?
  dueAt            DateTime?
  assigneeMemberId Int?
  event            Event
  assignee         Member?
  notes            Note[]
  attachments      Attachment[]
}

5) Amplify CI/CD (Next.js)

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - cd client
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: client/.next
    files:
      - '**/*'
  cache:
    paths:
      - client/node_modules/**/*
      - client/.next/cache/**/*

Security & Compliance

  • Authentication via AWS Cognito with MFA options, strict password policy
  • RBAC, JWT, API rate limiting; VPC isolation, SGs and IAM for least-privilege
  • Encryption at rest (RDS/S3) and in transit (HTTPS); Secrets Manager rotation
  • Compliance posture: SOC 2, HIPAA, GDPR ready practices

Performance & Scalability

Frontend

  • FCP < 1.5s, LCP < 2.5s, CLS < 0.1, FID < 100ms
  • Code-splitting, image optimization, lazy loading, PWA

Backend

  • p95 API < 200ms, PgBouncer pooling, read replicas
  • EC2 ASG + ALB, CloudFront edge caching

Project Highlights

  • Full-stack application with frontend, backend, and database integration
  • AWS cloud infrastructure with Cognito auth, S3 storage, and RDS PostgreSQL
  • Real-time features, advanced filtering, and multi-view event management
  • Production-ready architecture designed for scalability and security

Future Enhancements

  • Predictive analytics, smart task assignment, anomaly detection
  • Mobile apps (iOS/Android) with offline & push
  • Calendar/Payments/Social integrations; GraphQL API; serverless