How I Built NexBrief: An Automated Daily IT Newsletter Platform for Engineering Students A B.Tech student has built NexBrief, India's first dedicated daily newsletter platform for engineering students and IT professionals, which delivers curated IT and AI news to subscribers' inboxes every morning at 7:00 AM IST. The platform uses a custom pooling algorithm that pulls from multiple NewsAPI streams to maintain a 60-40 split between India-centric and global content, with automatic fallback to cached articles when live feeds are short. NexBrief also bypasses common SMTP port restrictions by communicating with Brevo's transactional HTTPS REST API over Port 443 to ensure reliable email delivery. As a B.Tech student, keeping up with the rapid developments in the IT and AI sectors is critical for career development, placements, and interviews. However, searching through countless tech blogs, college portals, and world news sites every single day is time-consuming and exhausting. To solve this problem, I built NexBrief —India's first dedicated daily newsletter and intelligence platform tailored specifically for engineering students and IT professionals. Every morning at 7:00 AM IST , registered subscribers receive a curated, highly structured newsletter direct to their inbox. Readers can get fully caught up in just 2 to 5 minutes . In this article, I’ll share the architecture under the hood, key engineering challenges I solved, and code snippets from the system. NexBrief operates on a strict, target-driven content ratio to deliver maximum value in minimum time: A major product requirement was to balance news localization: exactly 60% of the content must be India-centric , while 40% focuses on Global updates . To implement this, I built a custom pooling algorithm that pulls from multiple NewsAPI streams, categorizes them, separates them into India vs. World pools, and applies dynamic sizing. If the live feed has a shortage of articles, it gracefully backfills the remainder from cached fallbacks, ensuring the newsletter layout is always balanced. Here is the core news mixing algorithm newsService.js : js const mixIndiaAndWorld = liveArticles, min, max, categorizeFn, fallbackFn = { const cleanArticles = liveArticles || .filter a = a.title && a.title == ' Removed ' && a.description && a.url ; const seenTitles = new Set ; const uniqueLive = ; for const a of cleanArticles { const titleNorm = a.title.toLowerCase .trim ; if seenTitles.has titleNorm continue; seenTitles.add titleNorm ; const cat = categorizeFn a.title + ' ' + a.description || '' ; uniqueLive.push { title: a.title, description: a.description || 'Click to read full article.', url: a.url, urlToImage: a.urlToImage || getCategoryStockImage cat , source: a.source?.name || 'News Source', publishedAt: a.publishedAt || new Date .toISOString , category: cat, isIndia: isIndiaRelated a.title, a.description, a.source?.name } ; } const liveIndia = uniqueLive.filter a = a.isIndia ; const liveWorld = uniqueLive.filter a = a.isIndia ; // Determine dynamic count C based on news availability let C = Math.min Math.max uniqueLive.length, min , max ; const targetIndiaCount = Math.round C 0.6 ; const targetWorldCount = C - targetIndiaCount; // Fetch fallbacks if live news is short const allFallbacks = fallbackFn 50 ; const fallbackIndia = allFallbacks.filter f = f.isIndia ; const fallbackWorld = allFallbacks.filter f = f.isIndia ; const finalIndia = fillPool liveIndia, fallbackIndia, targetIndiaCount, seenTitles ; const finalWorld = fillPool liveWorld, fallbackWorld, targetWorldCount, seenTitles ; const combined = ...finalIndia, ...finalWorld ; // Sort India-related to the top return combined.sort a, b = a.isIndia && b.isIndia ? -1 : 1 ; }; A common problem in aggregators is missing images from news feeds, leaving ugly gray boxes on dashboards or emails. NexBrief solves this by binding high-resolution, topic-relevant Unsplash images dynamically based on article subtopics e.g. AI, Science, Cybersecurity, Software, Cloud . If the publisher provides no image, the system automatically injects a beautiful themed placeholder. Many popular cloud hosting providers like Render block standard SMTP outbound ports 25, 465, 587 by default. This prevents node-mailer from connecting to SMTP servers. To bypass this restriction, I designed the system to communicate directly with Brevo using its Transactional HTTPS REST API over Port 443 instead of traditional SMTP. This guarantees 100% email delivery. Here is the sender service integration emailService.js : js const fetch = require 'node-fetch' ; const sendEmailViaAPI = async { toEmail, toName, subject, htmlContent } = { const BREVO API URL = 'https://api.brevo.com/v3/smtp/email'; try { const response = await fetch BREVO API URL, { method: 'POST', headers: { 'accept': 'application/json', 'api-key': process.env.BREVO API KEY, 'content-type': 'application/json', }, body: JSON.stringify { sender: { name: process.env.FROM NAME || 'NexBrief Daily', email: process.env.FROM EMAIL, }, to: { email: toEmail, name: toName } , subject: subject, htmlContent: htmlContent, } , } ; const data = await response.json ; if response.ok { throw new Error data.message || 'Brevo API Send Failure' ; } return data; } catch error { console.error ❌ Send Failure to ${toEmail}: , error.message ; throw error; } }; Admins have access to a secure, password-guarded control panel built with glassmorphism aesthetics. The panel allows: To ensure rapid search engine discoverability on subdomains, NexBrief is shipped with verified sitemaps and crawling permissions robots.txt and sitemap.xml which are submitted and successfully tracked by Google Search Console . If you'd like to support the project, please leave a ⭐ on the GitHub repository and sign up to receive your first brief tomorrow morning I'd love to hear your feedback in the comments.