This guide will walk you through setting up the Novel November project from scratch.
Before you begin, ensure you have:
- ✅ Node.js (v14 or higher)
- ✅ npm or yarn package manager
- ✅ Zoho Catalyst account
- ✅ Catalyst CLI installed globally
- ✅ Git installed
- ✅ Modern web browser (Chrome, Firefox, Safari, Edge)
npm install -g zcatalyst-cliVerify installation:
catalyst --versionThis Project is not yet clone friendly - feel free to get in touch to make.
Have the index.html, mobile.html, main.css, main.js, mobile.css, config.js and bookContent.js in same folder
#cd into the directory
# Install dependencies
npm installcatalyst login
catalyst initFollow the prompts:
- Project Name:
<proj name> - Project Type:
Full Stack Application - Choose your data center
Now you can expect some new folders poped-up cd into function/ now replace the index.js file there or copy paste it.
Create these tables in Catalyst Console (Datastore):
Table Name: Chapters
Columns:
- ROWID (Auto-generated, Primary Key)
- avgRating (Number, Default: 0)
- totalNoOfRatings (Number, Default: 0)
Table Name: Ratings
Columns:
- ROWID (Auto-generated, Primary Key)
- user_id (Text, Required)
- chapter_id (Text, Required)
- rating (Number, Required, Min: 1, Max: 5)
- CREATEDTIME (Auto-generated timestamp)
Table Name: Comments
Columns:
- ROWID (Auto-generated, Primary Key)
- chapter_id (Text, Required)
- user_id (Text, Required)
- user_name (Text, Required)
- user_email (Text, Required)
- comment_text (Text, Required, Max: 1000)
- CREATEDTIME (Auto-generated timestamp)
Table Name: users
Columns:
- ROWID (Auto-generated, Primary Key)
- userMailid (Email, Required, Unique)
- CREATEDTIME (Auto-generated timestamp)
You need to pre-populate the Chapters table with 30 chapter IDs:
// Chapter IDs to insert:
21862000000016002 // Chapter 1
21862000000015040 // Chapter 2
21862000000015064 // Chapter 3
// ... (add all 30 chapter IDs)Insert via Catalyst Console or using a script:
const chapters = [
{ ROWID: "21862000000016002", avgRating: 0, totalNoOfRatings: 0 },
{ ROWID: "21862000000015040", avgRating: 0, totalNoOfRatings: 0 },
// ... add all chapters
];In Catalyst Console:
- Go to Authentication section
- Enable Email/Password authentication
- Set allowed email domains:
@zxyz.com[Optinal if you don't want just comment out the block] - Configure redirect URLs:
- Success:
/app/index.html - Failure:
/app/index.html
- Success:
- Create default user role with permissions:
- Read access to Datastore tables
- Execute functions
- Access authentication endpoints
Edit app/config.js:
// For development
const BASE_URL = 'https://YOUR-PROJECT-ID-60044720209.development.catalystserverless.in';
// For production
const BASE_URL = 'https://YOUR-PROJECT-ID-60044720209.catalystserverless.in';
window.APP_CONFIG = {
BACKEND_URL: BASE_URL + '/server/<foldername/projectname>',
AUTH_LOGIN_URL: BASE_URL + '/__catalyst/auth/login',
AUTH_SIGNUP_URL: BASE_URL + '/__catalyst/auth/signup',
AUTH_LOGOUT_URL: BASE_URL + '/__catalyst/auth/logout',
};Replace YOUR-PROJECT-ID with your actual Catalyst project ID.
If using Cliq notifications, update in functions/<foldername/projectname>/index.js:
const CLIQ_CONFIG = {
ACCESS_TOKEN: "YOUR_ACCESS_TOKEN",
DOMAIN: "https://cliq.zoho.in",
REFRESH_TOKEN: "YOUR_REFRESH_TOKEN",
CLIENT_ID: "YOUR_CLIENT_ID",
CLIENT_SECRET: "YOUR_CLIENT_SECRET"
};Get these from Zoho Cliq API Console.
catalyst deploy --type functionscatalyst deploy --type clientcatalyst deploy- Visit:
https://your-url.catalystserverless.in/app/index.html - Click on signup/login
- Create account with @xyz.com email [Optional]
- Verify email and login
- Navigate to any chapter
- Scroll to rating widget
- Click stars to rate (1-5)
- Verify rating is saved
- Refresh page - rating should persist
- Navigate to a chapter
- Click discussion button
- Post a comment
- Verify it appears in the list
- Try deleting your own comment
- Visit on mobile device or use Chrome DevTools
- Should auto-redirect to mobile.html
- Test touch navigation
- Verify all features work
Your can host your images on Zoho Catalyst under Stratus in Datastore:
https://imgs-development.zohostratus.in/
To use your own hosting:
- Upload images to your preferred CDN
- Update image URLs in
bookContent.js - Or configure Catalyst File Store
Solution:
- Check
config.jshas correct URLs - Verify Catalyst auth is enabled
- Check browser console for errors
- Clear cookies and try again
Solution:
- Verify Ratings table exists with correct columns
- Check user is authenticated
- Inspect network tab for API errors
- Check backend logs in Catalyst Console
Solution:
- Check image URLs are accessible
- Verify CORS headers if using external CDN
- Check browser console for 404 errors
- Ensure image paths match in bookContent.js
Solution:
- Verify Comments table exists
- Check user is authenticated
- Verify character limit (max 1000)
- Check backend function logs
Solution:
- Check user agent detection in index.html
- Clear browser cache
- Verify mobile.html exists and is deployed
- Test with actual mobile device
# Compress images before uploading
npm install -g imagemin-cli
imagemin images/* --out-dir=images/optimized# Minify JavaScript
npm install -g uglify-js
uglifyjs main.js -o main.min.js
# Minify CSS
npm install -g clean-css-cli
cleancss main.css -o main.min.cssAdd in your HTML:
<meta http-equiv="Cache-Control" content="public, max-age=31536000">- Never commit secrets - Use environment variables
- Validate all inputs - Both frontend and backend
- Use HTTPS only - Catalyst provides this by default
- Implement rate limiting - Protect API endpoints
- Sanitize user content - Prevent XSS attacks
- Keep dependencies updated - Run
npm auditregularly
catalyst logs:function --name novelnovemberfunction- Check Catalyst Console > Datastore
- View table records and stats
- Monitor API call counts
- Check Catalyst Console > Analytics
- Monitor active users
- Track feature usage
- ✅ Test all features thoroughly
- ✅ Configure custom domain (optional)
- ✅ Set up SSL certificate (if custom domain)
- ✅ Configure backup strategy
- ✅ Set up monitoring alerts
- ✅ Create admin panel (optional)
- ✅ Implement analytics (optional)
If you need help:
- 📧 Email: aathithyanvl@gmail.com
- 🐛 GitHub Issues: Create an issue
- 📚 Catalyst Docs: https://catalyst.zoho.com/help
- 💬 Community: Zoho Developer Community
- Discord: Nobodycod4#8440