Foundation first
Interns first understand how websites work, how code becomes live, and how the basic web stack fits together.
Explore our comprehensive 8-module curriculum, detailing the 10 key technical concepts covered in each phase. Please note that the detailed execution, practical integration, and step-by-step application of these points will be taught directly during the internship sessions and guided by the custom Learning Software developed by Dominal Tech.
The module order is designed to move from fundamentals and deployment toward backend integration, polished interface building, AI workflows, app conversion, and custom-data AI systems.
Interns first understand how websites work, how code becomes live, and how the basic web stack fits together.
Once hosting is clear, they learn how Supabase connects the frontend to a real backend with login and live data.
They then build stronger interfaces, use AI APIs, and make the web app feel more app-like with installability and notifications.
The final modules show how web apps become desktop apps and how AI can answer from private or custom data using RAG basics.
Each module below includes 10 essential teaching points with concise explanations and practical framing for internship delivery.
HTML gives the structure, CSS gives the design, and JavaScript adds interaction. Before React or bigger frameworks, these three are the core building blocks of the web.
Pages connect using links, buttons, navigation bars, and file paths. This helps interns understand how multi-page websites are organized.
The browser loads HTML first, then CSS styles it, and JavaScript adds behavior. This gives students a simple mental model of page rendering.
GitHub stores code online, keeps version history, helps collaboration, and acts as a source of truth for projects that will later be deployed.
A repository is a project space containing files, commits, branches, and updates. Interns should understand that every project usually lives inside a repo.
Vercel connects to a GitHub repository and turns the project into a live website. Updates pushed to the repo can automatically redeploy the site.
Deployment is the process of making local code available online so anyone can open it with a public URL in a browser.
A domain is the human-friendly website name, like `example.com`, that people type instead of using a long technical hosting address.
DNS tells the internet where the domain should point. Nameservers and DNS records connect the purchased domain to the correct hosting provider.
After buying a domain, you either change nameservers or add records like A or CNAME so the domain points to Vercel or another host correctly.
Supabase is a backend platform that gives database, authentication, APIs, storage, and realtime features from one project.
You create a project in the dashboard, choose region and credentials, and let Supabase provision the backend environment.
The Project URL is the unique address of the Supabase project. Your frontend uses it to know which backend instance it should talk to.
The anon key is the public frontend key used to initialize the client safely for allowed operations. It identifies the app, not the individual user.
The service role key has high privileges and should never be exposed in browser code. It belongs only in trusted server-side environments.
The frontend initializes a Supabase client using the project URL and anon key, usually through environment variables or configuration values.
Your app stores and reads data from tables such as users, tasks, internships, products, or project updates.
Supabase Auth manages signup, login, sessions, and identity so different users can securely access the app.
Supabase can notify the frontend about inserts, updates, or deletes so UI data can update in near realtime without full page refreshes.
Security does not come from hiding the anon key. It comes from authentication, database permissions, and proper access control policies.
Icons and visuals should feel professional and branded. SVGs scale better, look cleaner, and match a proper product website more than emojis.
A clean white background with black text and a limited dark-blue accent makes the website feel serious, modern, and premium instead of noisy.
Use sliders for portfolio previews, products, screenshots, or testimonials. The slider should feel useful and controlled, not distracting.
When the site or web app has a few main actions, a bottom taskbar makes them easier to reach on phones and creates a more app-like experience.
The hamburger menu is useful for extra pages or secondary navigation so the main screen stays clean and uncluttered.
A strong hero usually needs a clear heading, short description, one main CTA, and one visual or screenshot that communicates value fast.
Pages should feel complete and intentional with a structure such as hero, features, showcase, proof, FAQ, and footer rather than random blocks.
Consistency helps the entire page feel like one system. Random spacing or mismatched buttons can make a site look less professional.
Motion should feel subtle and professional. Clean line animations, shape transitions, or layered SVG movement can make the page more impressive.
Text, sections, navigation, and touch targets should work properly on smaller screens first so the site feels complete across devices.
An AI API lets your app send text to a model and receive a generated response back. This is the base of chatbot integration.
The user sends a message, the app sends it to the model, and the model returns a reply that is displayed in the chat UI.
An API key is a private credential that allows your backend or app logic to access the AI provider securely.
The frontend shows the interface, while the backend usually handles the secure API request so secrets are not exposed publicly.
A model is the AI engine you choose based on speed, capability, and cost depending on the product feature you are building.
Instructions such as system guidance and user messages shape how the AI responds and what behavior it follows.
Temperature affects how creative or stable the answer feels, while max tokens helps limit length and usage.
Past messages can be sent with the current one so the chatbot remembers the flow of the conversation inside a session.
A chatbot should show waiting states, error messages, and safe handling for failed requests or usage limits.
This is direct AI API integration only. It does not yet use PDFs, company documents, databases, or custom data at answer time.
A Progressive Web App is a website that behaves more like an app through installability, offline support, and a smoother experience on devices.
They let users access a website in the browser but also install it like an app without building a full native application first.
A typical PWA needs a valid web app plus a manifest file, service worker, proper icons, and secure delivery over HTTPS.
The manifest tells the browser the app name, icons, theme, start URL, and how the app should appear when launched.
A service worker helps control caching, offline loading, and some background-style behavior for the app.
When the right signals are present, the browser can show an install prompt or allow the site to be added to the home screen or desktop.
PWAs can open in standalone mode and reduce visible browser chrome so the interface feels more like a dedicated application.
Depending on caching strategy, some pages or assets can still load even when the network is weak or unavailable.
Good icons in multiple sizes make the app look polished and trustworthy when installed on a phone or desktop.
PWAs are powerful but still differ from fully native apps in some deeper device access and platform-specific behavior.
They are alerts sent by a web app that appear like app notifications on a phone or desktop device.
Notifications help bring users back for updates, reminders, tasks, approvals, messages, or important product events.
Some notifications happen while the app is active, while push flows can notify users even when the app is not open in the foreground.
The browser must ask the user for permission before showing notifications, so notification access is never automatic.
Service workers are often used to support notification behavior and background logic for installed web apps.
Permission should be requested after the user sees value, not immediately on page load with no context.
Good notifications use clear titles, useful messages, icons, and actions so the user knows why the alert matters.
Alerts should be timely, relevant, and controlled. Too many irrelevant notifications reduce trust and engagement.
Users should be able to manage preferences or disable notifications so the experience respects their choice.
Notification behavior varies by browser and device, so cross-device testing is an important part of implementation.
Electron is a framework for building desktop apps using HTML, CSS, and JavaScript and running them as Windows, macOS, or Linux applications.
It lets you reuse web skills and often reuse existing UI code while packaging the product as a standalone desktop app.
A basic Electron setup usually includes `package.json`, `main.js`, your web files like `index.html`, and optionally `preload.js` and assets.
`package.json` stores project metadata, the app entry, and scripts such as `start`, which tells npm how to launch Electron.
`main.js` creates the Electron window and tells it what to load — either a local HTML file or a hosted URL.
Electron can load website files bundled inside the app or wrap a live deployed website inside a desktop shell.
Common starter commands are `npm init -y`, `npm install electron --save-dev`, then adding a start script and running `npm start`.
`preload.js` can expose safe functionality between Electron and the web app, and app icons improve branding and polish.
After local testing, tools like Electron Forge or Electron Builder can package the project into installable desktop builds.
Electron is useful when you want desktop distribution, installer support, local integration, and a stronger app-like delivery model without rewriting everything natively.
RAG stands for Retrieval-Augmented Generation, where the AI first retrieves useful information and then generates an answer using it.
Normal AI chatbots may not know private or company-specific information, so RAG helps them answer from your own data.
Custom data can include PDFs, text files, FAQs, website content, notes, internal documents, or database records.
The user asks a question, the system finds relevant content, and then passes that selected content to the AI along with the question.
Retrieval is the step where the app searches for the most relevant stored information before the model answers.
Long documents are split into smaller pieces called chunks so the system can search and match them more accurately.
Embeddings help the system understand meaning and similarity so it can find related content even when wording differs.
The model usually sees only the retrieved relevant pieces, not the entire database or all documents every time.
It can answer more accurately and specifically because the response is grounded in the company’s own information.
RAG is useful for company assistants, internal help systems, SOP support, documentation bots, search tools, and business knowledge interfaces.
By the end of the internship, interns should understand how to create websites, deploy them, connect real backend data, design more professional interfaces, add AI features, make web apps installable, wrap them as desktop apps, and understand the basics of AI systems powered by custom data.