Introduction

Platform Overview

This platform supports multiple conferences from a single codebase. Each conference has its own:

  • Database records (tagged by conferenceId)
  • Email account for sending notifications
  • Login credentials for the admin dashboard
  • Seed data (default content for the website)
💡
What you need to do To add a new conference, you need to update exactly 4 files and run 1 API call. Nothing else changes.
1
Step 1

Choose a Conference ID

The conferenceId is a short lowercase string that identifies your conference throughout the entire system. It is used in the database, API calls, and email routing.

  • Must be lowercase letters only (no spaces, no special characters)
  • Must be unique — check existing ones below
  • Keep it short and descriptive

Already taken IDs:

liutex foodagri fluid renewable cyber powereng polymat iqces2026 healthmed
▶ Example — Nano Technology Summit 2026
conferenceId = nanotechsummit username = NANOTECHSUMMIT2026 displayName = NANO TECHNOLOGY SUMMIT 2026
2
Step 2

Update the .env File

.env  (project root)

Add these lines at the bottom of the .env file. Replace YOURCONF with your conference short name in uppercase:

ENV — Template
# ── YOUR CONFERENCE NAME HERE ──────────────────────────────────
YOURCONF_EMAIL=yourconf@sciengasummits.com
YOURCONF_SMTP_USER=yourconf@sciengasummits.com
YOURCONF_SMTP_PASS=your_gmail_app_password_here

Real example for nanotechsummit:

ENV — Example
# ── NANO TECH SUMMIT 2026 ──────────────────────────────────────
NANOTECH_EMAIL=nanotech@sciengasummits.com
NANOTECH_SMTP_USER=nanotech@sciengasummits.com
NANOTECH_SMTP_PASS=abcd efgh ijkl mnop
🔑
Gmail App Password The SMTP_PASS is a Gmail App Password (16 characters with spaces). Get it from: Google Account → Security → 2-Step Verification → App Passwords. The code strips spaces automatically, so paste it as-is.
Also update the conference selection section

Update the CONFERENCE SELECTION section at the top of .env to point to your new conference:

ENV — Conference Selection
NEXT_PUBLIC_CONFERENCE_ID=nanotechsummit
NEXT_PUBLIC_SITE_NAME=NANOTECHSUMMIT2026
NEXT_PUBLIC_SITE_URL=https://nanotechsummit.com
NEXT_PUBLIC_SITE_DESC=International Conference on Nano Technology. December 2026 · Singapore.
3
Step 3

Register in src/lib/auth.js

src/lib/auth.js

Find the CONFERENCE_ACCOUNTS array and add a new entry at the bottom (before the closing bracket):

JavaScript
{
  username: 'NANOTECHSUMMIT2026',
  email: process.env.NANOTECH_EMAIL || 'nanotech@sciengasummits.com',
  conferenceId: 'nanotechsummit',
  displayName: 'NANO TECHNOLOGY SUMMIT 2026',
},
FieldDescription
usernameThe login username for the admin dashboard. Must be UPPERCASE.
emailThe admin email where notifications are sent. Reads from .env.
conferenceIdMust exactly match what you decided in Step 1.
displayNameHuman-readable name shown in the dashboard.
Critical: ID must match everywhere The conferenceId here must exactly match what you use in seedData.js (Step 5) and in the .env NEXT_PUBLIC_CONFERENCE_ID. If they don't match, data will not load.
4
Step 4

Add Email Sender in src/lib/emailSender.js

src/lib/emailSender.js

You need to add your conference in two places inside this file.

📍 Place 1 — Inside this._accounts object in the constructor (~line 20)

Find the last entry (e.g. healthmed) and add yours after it:

JavaScript — Constructor
nanotechsummit: {
  user: process.env.NANOTECH_SMTP_USER || this._defaultUser,
  pass: (process.env.NANOTECH_SMTP_PASS || this._defaultPass).replace(/\s/g, ''),
},
📍 Place 2 — Inside _getAdminEmail method (~line 160)

Find the envMap object and add your entry:

JavaScript — envMap
nanotechsummit: process.env.NANOTECH_EMAIL,
⚠️
Don't skip this step If you skip this step, emails (OTP, registration confirmations, abstract notifications) will fall back to the default liutex email account instead of your conference email.
5
Step 5 — Most Important

Add Seed Data in src/lib/seedData.js

src/lib/seedData.js

Seed data is the default content that gets inserted into the database for your conference. This step has two parts.

Part A — Add the defaults array

Find the healthmedDefaults section (~line 582) and add your new array BEFORE the const conferences = [ line:

JavaScript — seedData.js (Part A)
// ═══ NANO TECH SUMMIT 2026 ════════════════════════════════════
const nanotechDefaults = [
  {
    key: 'hero',
    data: {
      subtitle: 'INTERNATIONAL CONFERENCE ON',
      title: 'NANO TECHNOLOGY SUMMIT 2026',
      description: 'International Conference on Nano Technology, where global experts unite to shape the future of nanotechnology and materials science.',
      conferenceDate: 'December 14-16, 2026',
      venue: 'Singapore',
      countdownTarget: '2026-12-14T09:00:00+08:00',
      showRegister: true,
      showAbstract: true,
      showBrochure: true
    }
  },
  {
    key: 'about',
    data: {
      subtitle: 'Advancing Nano Technology',
      title: 'About The Conference',
      paragraph1: 'The International Conference on Nano Technology is a premier platform...',
      paragraph2: 'This conference brings together leading researchers and industry experts...',
      objectives: [
        'Promote advancements in nanotechnology research',
        'Explore innovations in nanomaterials',
        'Bridge academia and industry'
      ],
      keyThemes: [
        'Nanomaterials & Nanostructures',
        'Nano Electronics',
        'Bionanotechnology'
      ]
    }
  },
  {
    key: 'importantDates',
    data: {
      dates: [
        { month: 'JUN', day: '15', year: '2026', event: 'Abstract Submission Opens', icon: 'CalendarDays' },
        { month: 'SEP', day: '25', year: '2026', event: 'Early Bird Deadline', icon: 'CheckCircle' },
        { month: 'OCT', day: '30', year: '2026', event: 'Submission Deadline', icon: 'Clock' },
        { month: 'DEC', day: '14', year: '2026', event: 'Conference Date', icon: 'Star', sub: 'December 14-16, 2026, Singapore' }
      ]
    }
  },
  {
    key: 'stats',
    data: {
      title: 'NANO TECH SUMMIT CONFERENCES APPROACH',
      items: [
        { number: '15+', label: 'Years Experience' },
        { number: '100+', label: 'Events' },
        { number: '2000+', label: 'Speakers' },
        { number: '5000+', label: 'Attendees' },
        { number: '150+', label: 'Countries' }
      ]
    }
  },
  {
    key: 'pricing',
    data: {
      title: 'REGISTRATION PRICING',
      packages: [
        { title: 'Speaker', price: '799', currency: 'USD', features: ['Oral Presentation', 'E-Abstract Book', 'Certificate of Attendance', 'Lunch and Coffee Breaks'] },
        { title: 'Delegate', price: '899', currency: 'USD', features: ['Delegate Opportunities', 'E-Abstract Book', 'Certificate of Attendance', 'Lunch and Coffee Breaks'] },
        { title: 'Student', price: '499', currency: 'USD', features: ['Student Presentation', 'E-Abstract Book', 'Certificate of Attendance', 'Lunch and Coffee Breaks'] }
      ]
    }
  },
  {
    key: 'sessions',
    data: {
      sessions: ['Nanomaterials & Nanostructures', 'Nano Electronics', 'Bionanotechnology', 'Nano Photonics', 'Nano Medicine'],
      schedule: {
        day1: [
          { time: '8.30 - 9.00', program: 'Registration' },
          { time: '9.00 - 9.30', program: 'Conference Inauguration' },
          { time: '9.30 - 11.00', program: 'Plenary Sessions' },
          { time: '13.10 - 14.00', program: 'Lunch' },
          { time: '14.00 - 17.30', program: 'Keynote Sessions' }
        ],
        day2: [
          { time: '9.00 - 13.00', program: 'Scientific Sessions' },
          { time: '13.00 - 14.00', program: 'Lunch' },
          { time: '14.00 - 16.00', program: 'Panel Discussions' }
        ],
        day3: [
          { time: '9.00 - 12.30', program: 'Networking & Workshops' },
          { time: '13.30 - 15.00', program: 'Final Remarks & Departure' }
        ]
      }
    }
  },
  {
    key: 'venue',
    data: {
      title: 'Conference Venue',
      name: 'Singapore',
      address: 'Singapore',
      description: 'A world-class conference venue in Singapore.',
      images: [
        'https://images.unsplash.com/photo-1540575861501-7ad05823c93e?w=1920&q=80',
        'https://images.unsplash.com/photo-1512470876302-972fad2aa9dd?w=1920&q=80'
      ]
    }
  },
  {
    key: 'contact',
    data: {
      email: 'info@nanotechsummit.com',
      phone: '+65 0000 0000',
      address: 'Singapore',
      socialLinks: { facebook: '', twitter: '', linkedin: '', instagram: '' }
    }
  },
  {
    key: 'marquee',
    data: {
      title: 'Supporting Universities & Institutions',
      items: ['MIT', 'Stanford University', 'ETH Zurich', 'National University of Singapore', 'University of Cambridge']
    }
  }
];
Part B — Register in the conferences array

Find the conferences array (just below the healthmedDefaults) and add your entry:

JavaScript — conferences array
{ name: 'nanotechsummit', defaults: nanotechDefaults },
Don't forget Part B! Adding the defaults array alone is not enough. You must also add it to the conferences array or it will never be seeded into the database.
6
Step 6

Seed the Database

Now push your seed data into MongoDB. You can use Postman, Thunder Client (VS Code extension), or the browser fetch console.

Option A — First time (safe insert, skips existing)
POST http://localhost:5050/api/admin/seed
Option B — Force overwrite (deletes old data and reinserts fresh)
PUT http://localhost:5050/api/admin/seed

Request body:

JSON — Request Body
{
  "conference": "nanotechsummit"
}
✓ Expected Success Response
JSON — Response
{
  "success": true,
  "message": "Force reseed complete for: nanotechsummit",
  "results": [
    {
      "conference": "nanotechsummit",
      "deleted": 0,
      "inserted": 9
    }
  ]
}
7
Step 7

Verify the Data

Check that your data was inserted correctly by calling the content API:

GET http://localhost:5050/api/content?conference=nanotechsummit
What to expect You should see all 9 content keys returned in the response: hero  •  about  •  importantDates  •  stats  •  pricing  •  sessions  •  venue  •  contact  •  marquee
🔄
Restart the dev server After changing .env, you must restart npm run dev. Environment variables are only read at startup.
Before You Ship

Final Checklist

  • Step 1 — Conference ID
  • Step 2 — .env File
  • Step 3 — auth.js
  • Step 4 — emailSender.js
  • Step 5 — seedData.js
  • Steps 6 & 7 — Database
!
Troubleshooting

Common Mistakes

1

conferenceId mismatch

The conferenceId in auth.js, seedData.js, and .env must all be identical. Even one typo means data won't load.

2

Forgot to restart server

After changing .env, you MUST restart npm run dev. Environment variables are only read at startup.

3

SMTP password with spaces

Gmail App Passwords have spaces (e.g. abcd efgh ijkl mnop). The code strips them automatically, so paste as-is.

4

Using uppercase in conferenceId

conferenceId must be lowercase. The username in auth.js is uppercase. These are different fields.

5

Forgot to add to conferences array

Adding the defaults array in seedData.js is not enough. You must also add it to the conferences array or it will never be seeded.