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)
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:
conferenceId = nanotechsummit
username = NANOTECHSUMMIT2026
displayName = NANO TECHNOLOGY SUMMIT 2026
Update the .env File
Add these lines at the bottom of the .env file. Replace YOURCONF with your conference short name in uppercase:
# ── 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:
# ── NANO TECH SUMMIT 2026 ──────────────────────────────────────
NANOTECH_EMAIL=nanotech@sciengasummits.com
NANOTECH_SMTP_USER=nanotech@sciengasummits.com
NANOTECH_SMTP_PASS=abcd efgh ijkl mnop
Update the CONFERENCE SELECTION section at the top of .env to point to your new conference:
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.
Register in src/lib/auth.js
Find the CONFERENCE_ACCOUNTS array and add a new entry at the bottom (before the closing bracket):
{
username: 'NANOTECHSUMMIT2026',
email: process.env.NANOTECH_EMAIL || 'nanotech@sciengasummits.com',
conferenceId: 'nanotechsummit',
displayName: 'NANO TECHNOLOGY SUMMIT 2026',
},
| Field | Description |
|---|---|
username | The login username for the admin dashboard. Must be UPPERCASE. |
email | The admin email where notifications are sent. Reads from .env. |
conferenceId | Must exactly match what you decided in Step 1. |
displayName | Human-readable name shown in the dashboard. |
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.
Add Email Sender in src/lib/emailSender.js
You need to add your conference in two places inside this file.
this._accounts object in the constructor (~line 20)Find the last entry (e.g. healthmed) and add yours after it:
nanotechsummit: {
user: process.env.NANOTECH_SMTP_USER || this._defaultUser,
pass: (process.env.NANOTECH_SMTP_PASS || this._defaultPass).replace(/\s/g, ''),
},
_getAdminEmail method (~line 160)Find the envMap object and add your entry:
nanotechsummit: process.env.NANOTECH_EMAIL,
Add Seed Data in src/lib/seedData.js
Seed data is the default content that gets inserted into the database for your conference. This step has two parts.
Find the healthmedDefaults section (~line 582) and add your new array BEFORE the const conferences = [ line:
// ═══ 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']
}
}
];
Find the conferences array (just below the healthmedDefaults) and add your entry:
{ name: 'nanotechsummit', defaults: nanotechDefaults },
conferences array or it will never be seeded into the database.
Seed the Database
Now push your seed data into MongoDB. You can use Postman, Thunder Client (VS Code extension), or the browser fetch console.
Request body:
{
"conference": "nanotechsummit"
}
{
"success": true,
"message": "Force reseed complete for: nanotechsummit",
"results": [
{
"conference": "nanotechsummit",
"deleted": 0,
"inserted": 9
}
]
}
Verify the Data
Check that your data was inserted correctly by calling the content API:
hero • about • importantDates • stats • pricing • sessions • venue • contact • marquee
.env, you must restart npm run dev. Environment variables are only read at startup.
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
Common Mistakes
conferenceId mismatch
The conferenceId in auth.js, seedData.js, and .env must all be identical. Even one typo means data won't load.
Forgot to restart server
After changing .env, you MUST restart npm run dev. Environment variables are only read at startup.
SMTP password with spaces
Gmail App Passwords have spaces (e.g. abcd efgh ijkl mnop). The code strips them automatically, so paste as-is.
Using uppercase in conferenceId
conferenceId must be lowercase. The username in auth.js is uppercase. These are different fields.
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.