Foundations
Wisej.NET lets you build real, modern web applications entirely in C# — no JavaScript, HTML or CSS required to get started. This course is the ground floor: you'll learn how the framework keeps a server-side .NET program and a live browser UI in perfect sync, then build, run and debug your very first app, from an empty Visual Studio solution to a working dashboard. Across ten modules you'll place and wire controls in the Designer, bind data to a DataGridView, build an application shell with navigation, and handle dialogs, validation and background work. Later modules cover theming, JavaScript interop through the Widget control, and configuration, security and deployment — before you pull it all together in a Mini Helpdesk capstone. It's written for developers who are new to Wisej.NET and want a guided, hands-on path from the fundamentals to a real app they can ship.
Build, run and debug your first real-time Wisej.NET app. The fastest path from install to a working dashboard.
- Level: Beginner
- Duration: 4.5h
- Modules: 10
Curriculum
Module 1: How Wisej.NET Works
Your first module of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the build walkthrough, pass the knowledge check, then complete the hands-on lab to earn the module.
- ReadingWhat Wisej.NET Is (and When to Use It) · 8 min
A clear picture of the framework before you write any code.
- ReadingGetting Started on Wisej.NET · 12 min
From an empty Visual Studio to a running app — and the habits that keep code clean.
- Video lessonBuild your first Wisej.NET app · 6 min
Watch a first Wisej.NET app come together — project, designer, a button event, and a local run. Runs right here in the player.
Narration transcript
Module one. Your first Wisej.NET application. We'll build a small screen that asks for a name and displays a greeting. This introduces the basic workflow: design the interface, handle an event, and test the result in a browser.
Start in Visual Studio and choose Create a new project. Wisej.NET uses the familiar project workflow, with templates that provide the initial application files. The interface will run in the browser, while our event code runs on the server.
Search for Wisej.NET. This walkthrough uses the Wisej.NET 4 Web Application template with C#. Select that template and continue. If it is missing from your own installation, check that the Wisej.NET extension and project templates are installed before proceeding.
Choose a project name and a location, then click Create. Visual Studio generates the project and its starting window. Look at Solution Explorer: this is where you'll find the application files and return to the window as you build the screen.
Build the project before opening the designer. The build compiles the application so the designer can load its types. Watch the Output window and wait for Build succeeded. If the build fails, resolve the errors before continuing with the layout.
In Solution Explorer, double-click Window1 to open its design view. This is the surface where we arrange the controls. The designer records their layout in Window1.Designer.cs. Keep that generated file under the designer's control; write the screen's behavior in Window1.cs.
Drag the controls from the Toolbox onto the window. A label asks for the user's name, a text box accepts the answer, and a button will run the greeting. Add a second label for the result. Each control now has a clear role in the interaction.
Set each control's Name and Text in the Properties window. Name is the identifier used by your code; Text is what the user sees. Use txtName for the input, btnSayHello for the button, and lblStatus for the result. The heading label is lblTitle.
Double-click the button to create its Click handler. Read txtName.Text and trim the spaces. If the result is empty, set lblStatus.Text to a message asking for a name, then return. Otherwise, put the greeting in the label. Validation happens before the successful response.
Press Start to run the application locally. When the browser opens, enter a name and click Say Hello. The Click handler runs and the result label displays the greeting. You have connected a visually designed screen to C# code and seen the response in the browser.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 1 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Create Your First Wisej.NET App · 25 min
Objective: A one-screen Wisej.NET app: type a name, click a button, and a label greets you — the full "design → name → handle event → run" cycle.
Module 2: Controls, Events & the Designer
Module 2 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the dashboard walkthrough, pass the knowledge check, then build the dashboard in the hands-on lab.
- ReadingUsing the Wisej Designer to Place Controls · 9 min
Build a screen visually in the Designer — place, name and arrange controls before any behavior.
- ReadingProperties, Events & Designer-Generated Code · 11 min
What the Designer generates, where your code belongs, and how to wire a clean button event.
- Video lessonBuild a Wisej.NET dashboard · 4 min
Watch a dashboard come together — Designer controls, named properties, a button Click event, and a local run. Runs right here in the player.
Narration transcript
In this lesson, we will build a Wisej.NET dashboard in the Visual Studio Designer. We will arrange its controls, give them meaningful names, and connect a button to a Click handler. You will see which work belongs in the generated layout and which belongs in your own code.
Open DashboardWindow in design view. This window will collect the service status, commands, and event history in one place, so users can understand the result of each action without changing screens.
Use the designer to arrange controls, the Toolbox to add them, and the Properties window to configure them. These three surfaces work together: select a control on the canvas before changing its properties.
Add a heading and a separate status label, then place the three service labels inside a panel. The panel groups related information, while the overall status remains easy to find above it.
Add Start, Stop, Reset, and Refresh buttons, followed by the event list. The buttons initiate actions; the list explains what happened. Keeping that history visible makes repeated actions easier to follow.
Set Text for the words the user sees and Name for the identifier your code uses. A name such as btnStart should identify the control’s purpose, so its event handler is easy to locate later.
Double-click Start to create its click handler. Update the status labels there and call a helper to append the event. Reusing the logging helper keeps the event history consistent across all four commands.
Write behavior in the window’s regular C# file. The designer maintains its own generated file for control creation and layout. Keeping those responsibilities separate prevents a later design change from overwriting your handwritten logic.
Run the project and wait for the browser to open. The screen you designed is now the user interface of the running application. Check its initial state before testing the buttons.
Click Start and watch the three service labels change to Online. The overall status becomes Running, and the event list records the action. Those visible changes should agree with one another.
Click Stop next. Each service becomes Offline, and a new entry records the stop. Keeping the earlier start entry lets the user see the sequence of actions rather than only the current state.
Click Reset to return the demonstration to its initial state. The previous log entries disappear and the status becomes Idle. Record the reset itself so the empty history has an understandable explanation.
Finally, click Refresh to read the current status again and add a log entry. Refresh checks the state; it does not mean Start or Reset. Distinct commands should produce distinct, understandable results.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 2 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Create a Wisej Dashboard Page · 30 min
Objective: A Wisej.NET dashboard page: a title and status label, three service indicators, Start / Stop / Reset / Refresh buttons, and an event log that updates on every click.
Module 3: Application Shell & Navigation
Module 3 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the navigation-shell walkthrough, pass the knowledge check, then build a reusable navigation shell in the hands-on lab.
- ReadingDesigning the Application Shell · 10 min
Design the outer structure of a real app — header, navigation, content area and status bar — and make it resize cleanly.
- ReadingReusable Navigation & Permissions · 9 min
The four views you'll build, one shell that owns navigation, and a first taste of permissions.
- Video lessonBuild a reusable Wisej.NET application shell · 5 min
Watch a navigation shell come together — header, left nav, a shared NavigateTo method swapping views into the content panel, breadcrumb and status updates, and view-only Settings. Runs right here in the player.
Narration transcript
We will build a shared shell for the application so every page uses the same navigation and layout. The header, navigation area, content region, and status bar each have a clear role. Centralizing page changes also gives us one place to reflect the current user's permissions in the navigation.
Watch the outer frame stay in place while the central view changes. This shared shell gives each feature a consistent home and avoids rebuilding navigation on every screen.
Arrange the header, navigation, content area, and status bar as separate regions. Each has a different responsibility: orientation, choosing a feature, doing the work, and reporting the result.
Dock the header at the top, navigation on the left, and status bar at the bottom. Let the content fill the remaining space so resizing preserves the overall structure.
Route every navigation button through NavigateTo. A single method can apply the same page-switching rules consistently; separate implementations in each button would drift as features are added.
Follow NavigateTo through the page change: remove the previous content, load the selected view, then update the breadcrumb and status. The navigation feedback must describe the view actually displayed.
Settings remains visible to the Support Agent, but Save is disabled in this demonstration. This illustrates a permission in the interface; the later authentication work must enforce the actual authorization too.
The shell now separates shared navigation from reusable feature views. When adding a page, connect it through the same navigation method and check that its location and status remain clear.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 3 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Build a Reusable Navigation Shell · 35 min
Objective: A reusable Wisej.NET navigation shell: a fixed header, breadcrumb and status bar with Dashboard / Tickets / Customers / Settings buttons that swap UserControl views into one content panel — plus view-only Settings for a Support Agent.
Module 4: Data Binding & the DataGridView
Module 4 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the data-binding walkthrough, pass the knowledge check, then build a data-bound ticket screen in the hands-on lab.
- ReadingData Binding & the DataGridView · 10 min
Model a business record, keep data logic in a service, and bind a ticket list to a DataGridView with detail controls.
- ReadingLayout — SplitContainer, Dock & AutoSize · 9 min
The layout tools that arrange a master-detail screen — SplitContainer, Dock and AutoSize — without fighting the page.
- Video lessonBuild a data-bound Wisej.NET ticket screen · 5 min
Watch a data-bound ticket screen come together — a Ticket model and service, a DataGridView bound through a BindingSource, detail controls that follow the selection, and a Save that refreshes the grid. Runs right here in the player.
Narration transcript
We will display a list of tickets in a DataGridView and connect the selected ticket to the detail controls. A service will provide the data, while the screen coordinates selection and display. This separation keeps database and business decisions out of the user interface event handlers.
Build the ticket editor around a shared data model rather than copying values between unrelated controls. Binding connects the selected record to the screen, while the service handles ticket operations.
Put the detail fields on the left and let the ticket grid fill the right side of the split container. Users can select a record and inspect its details without leaving the list.
Ticket describes the fields in a record. TicketService provides operations such as loading and saving. The screen calls those operations instead of becoming the place where persistence rules are implemented.
Connect the list and grid through a BindingSource, then bind the detail fields to that same source. Sharing the current record keeps Title, Status, Priority, and Description aligned with the selection.
Save through TicketService first, then notify the binding system with ResetBindings. Refreshing the display is separate from saving the data: an updated grid alone does not prove persistence succeeded.
Run the editor and select different ticket rows. Watch the detail fields follow the selection through BindingSource. This confirms that the grid and editor share the same current record.
Change the selected ticket’s status and click Save Ticket. Follow the operation into the service and back to the refreshed grid. The visible row should now reflect the value you saved.
Keep the model, service, and screen responsibilities distinct. When a value looks wrong, this separation gives you a useful question: is the record wrong, did saving fail, or is the display stale?
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 4 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Ticket Data Binding · 35 min
Objective: A data-bound Wisej.NET ticket screen: a SplitContainer with a read-only DataGridView bound to a TicketService, detail controls (title, status, priority, created date) that follow the selected row, and a Save Ticket button that goes through the service and refreshes the grid.
Module 5: Dialogs, Validation & Workflows
Module 5 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the dialog walkthrough, pass the knowledge check, then build Create and Edit Ticket dialogs in the hands-on lab.
- ReadingDialogs & Modal Workflows · 9 min
What a dialog is, when to use one instead of a page, the five-step modal workflow, and where message boxes help.
- ReadingValidation & the Save/Cancel Pattern · 9 min
Validate close to the UI without trapping business rules there, write a readable Save handler, and apply a consistent Save/Cancel pattern.
- Video lessonBuild a Create/Edit Ticket dialog in Wisej.NET · 5 min
Watch the add/edit workflow come together — a reusable TicketDialog, validation that blocks bad input, a Save that returns DialogResult.OK, and a parent page that refreshes with clear feedback. Runs right here in the player.
Narration transcript
We will use one dialog to create a ticket or edit an existing one. The dialog checks required fields and reports success only after the operation succeeds. Ticket operations remain in the service layer, so the same rules apply whichever screen opens the dialog.
Create one focused dialog for entering a ticket and editing an existing one. Give Save and Cancel distinct outcomes so closing the dialog never silently implies that data was accepted.
Group the ticket fields inside the dialog and keep Save and Cancel easy to find. The dialog should collect one coherent change, with enough information for the user to review before accepting it.
Initialize the same dialog differently for each workflow. New starts with empty input; Edit loads the selected ticket. Reusing the layout keeps the two workflows consistent without confusing their starting states.
Run ValidateForm before returning an accepted result. If required values are missing, keep the dialog open. DialogResult.OK should communicate valid accepted input, not merely that the Save button was pressed.
Open New and try saving without a title. The message identifies the missing information and the dialog stays open, giving the user a chance to correct the input without restarting the operation.
Complete the required fields and accept the dialog. The parent then calls TicketService and refreshes the grid. Follow that order so the user sees the result of the accepted, saved change.
Select an existing ticket and open Edit. Its current values should appear in the same dialog. Change a field, save, and verify that the corresponding row updates rather than creating another ticket.
Use the same sequence for both workflows: validate, accept, save through the service, and refresh. Keeping those stages explicit makes cancellation and validation failures easier to handle without accidental writes.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 5 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Create & Edit Ticket Dialogs · 35 min
Objective: Reusable Create and Edit Ticket dialogs on top of the Module 4 screen: one TicketDialog for both New and Edit, ValidateForm() that blocks bad input with clear messages, a Save that returns DialogResult.OK, and a Tickets page that adds/updates through the service and refreshes the grid.
Module 6: State, Sessions, Background Work & Errors
Module 6 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the background-work walkthrough, pass the knowledge check, then build a background job runner with logging in the hands-on lab.
- ReadingState, Sessions & Background Work · 10 min
Per-user session state vs shared state (and the static-field trap), plus running long work in a responsive background job.
- ReadingSafe Error Handling & Logging · 9 min
Catch exceptions and show safe messages, log useful detail, and keep the job handler readable with try/catch/finally.
- Video lessonRun background work safely in Wisej.NET · 5 min
Watch a background job runner come together — per-user state, a Start/Cancel workflow, a progress bar and log, and try/catch/finally that logs detail but shows the user a safe message. Runs right here in the player.
Narration transcript
We will run a simulated export or import in the background and show its progress without blocking the interface. Each connected user will keep their own operation state. We will also handle failures with a useful message for the user while keeping internal error details out of the screen.
Use the export and import demonstration to follow a job over time. A responsive screen needs more than a progress bar: users must understand whether work is running, finished, cancelled, or failed.
Keep the start commands, cancellation, progress, and log visible together. They answer different questions: what can I do, how far has the job progressed, and what has already happened?
In RunJobAsync, await each step and report its progress. Use the error handler for failures and the finally block for cleanup, so the interface can leave its busy state even when work fails.
Start Import and watch the controls change while the job runs. Disable commands that would conflict with the active operation, but keep progress and feedback available so the user can follow the work.
Keep progress and other user-specific values in the current session. A static field is shared across users, so storing one person’s job state there could make another person see or change it.
Enable Simulate Error and run the job again. Keep diagnostic details in the log for investigation, while the user receives a brief safe message. Technical exception details should not become public error text.
The button initiates the operation, the job performs the work, and the screen reports its state. Keep these roles separate so success, cancellation, and failure can all return the interface to a usable condition.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 6 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Background Jobs & Logging · 35 min
Objective: A responsive background job runner: Start/Cancel buttons, a progress bar, a status label and a timestamped log, long work run with async/await, try/catch/finally that logs details but shows a safe message, and UI state that always resets — with per-user state kept out of static fields.
Module 7: Theming & UI Modernization
Module 7 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the modernization walkthrough, pass the knowledge check, then theme and modernize the dashboard in the hands-on lab.
- ReadingTheming & the Theme Builder · 9 min
Apply a built-in theme, see where theme files and style options fit, and use Theme Builder at a beginner level — without touching business logic.
- ReadingVisual Hierarchy & Polishing Safely · 9 min
Visual-hierarchy rules that make screens easy to scan, plus how to polish the layout without breaking binding, navigation or validation.
- Video lessonModernize a Wisej.NET dashboard · 5 min
Watch a business dashboard get modernized — a built-in theme, a theme selector, metric cards, grouped commands and an active navigation state — while every existing workflow keeps working. Runs right here in the player.
Narration transcript
We will update the dashboard's appearance using a built-in theme, cards, and consistent navigation. The existing services, validation, and data binding will continue to do their jobs. This lets us improve how users read and navigate the screen without rewriting the application's business behavior.
Modernize the existing screen without rebuilding its behavior. A Wisej.NET theme supplies consistent visual choices; layout and navigation improvements then make the application easier to understand.
Make the page title easy to identify, group related metrics, and place commands beside the content they affect. Visual hierarchy should help users decide where to look and what to do next.
The theme selector changes Application.Theme.Name, while SetActiveButton marks the selected navigation item. Treat appearance and location as separate concerns so users still know where they are after switching themes.
Switch between the built-in themes and compare the same controls. Their appearance changes while the workflow remains the same. Check readability and active states rather than judging the theme only by its colors.
Review the finished dashboard as a whole. Consistent spacing, cards, and navigation should support the existing data binding and validation. A visual refresh succeeds when the familiar workflow becomes clearer.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 7 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Theme & Modernize the Dashboard · 35 min
Objective: A modernized dashboard and navigation shell: a built-in theme with a working theme selector, a clear header and left navigation with an active-page state, metric cards plus grouped commands and recent activity, consistent spacing — and every existing ticket workflow, binding and validation still working.
Module 8: JavaScript Integration with Widget
Module 8 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the widget walkthrough, pass the knowledge check, then build a JavaScript widget connected to C# data in the hands-on lab.
- ReadingNative Controls vs the Widget · 9 min
When to use native Wisej.NET controls vs a custom JavaScript Widget, the JavaScript file that creates the widget (a complete init/update example), and how to connect it from C# through Packages, InitScript and Options.
- ReadingClean C# & Widget Security · 9 min
Keep business rules in C# (not JavaScript), wrap integration code, and recognize the security risks of third-party scripts.
- Video lessonIntegrate a JavaScript Widget in Wisej.NET · 5 min
Watch a JavaScript widget integration come together — a Widget wrapper that loads JS/CSS, safe display data passed from a C# service, a refresh server event, and a data card to verify the values. Runs right here in the player.
Narration transcript
We will add a small JavaScript status visualization to a Wisej.NET screen. Native controls will still handle the ordinary interaction, and C# will own the data, decisions, and logging. The widget will display the values it receives, giving us a specialized visual without creating a second source of application state.
Add a small JavaScript visualization to the existing Wisej.NET application. Keep the main logic in C# so the extra visual does not become a second owner of the application’s decisions.
Use native Wisej.NET labels, buttons, and logging for ordinary interaction. Introduce a Widget only for the specialized visual. This keeps the integration focused instead of replacing controls that already solve the problem.
Send the widget only the display values it needs: status, ticket counts, and system load. C# remains responsible for those values; the browser visualization presents them without receiving unrelated server data.
The button handler updates the native labels and sends the same data through UpdateWidget. Using one result for both presentations prevents the text and visualization from describing different states.
Click Refresh Server Data and compare the labels with the widget. They should change together from the same server operation. If they disagree, inspect the data passed across the integration boundary.
Try Healthy, Warning, and Critical in turn. The C# events update the visual state and record the change. The event history helps explain why the widget has its current appearance.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 8 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Build a JavaScript Widget · 35 min
Objective: A small JavaScript visual widget (status gauge or chart) connected to server-side C# data: a Widget control fed safe display values through its options, a server-side data card to verify them, a Refresh button that updates the C# data and refreshes the widget — with all business rules and secrets kept in C#.
Module 9: Configuration, Security & Deployment
Module 9 of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the deployment-review walkthrough, pass the knowledge check, then build a deployment review checklist in the hands-on lab.
- ReadingConfiguration & Secrets · 9 min
Which configuration files to inspect before release, telling debug from production, and handling license keys and secrets safely.
- ReadingSecurity & Deployment Readiness · 10 min
Authentication vs authorization at a junior level, safe logging, deployment targets, and a required release checklist.
- Video lessonReview a Wisej.NET deployment package · 5 min
Watch a controlled deployment review come together — a release checklist, environment/target selection, role-gated review, safe secret handling, a troubleshooting log, and a package status that flips to ready. Runs right here in the player.
Narration transcript
We will review the application before packaging it for release. Configuration, secrets, logging, and permissions each need an explicit check. The release workflow will use those checks to decide whether the package is ready, while keeping confidential details out of user-facing messages.
Use the review screen to collect evidence before release. Configuration, security, and deployment checks belong in one repeatable process, so readiness depends on completed checks rather than a reassuring impression.
Record the environment, hosting target, version, and reviewer first. These details identify exactly what is being reviewed; a completed checklist for one environment does not automatically cover a different release target.
Work through the required configuration checks separately from optional notes. A note can explain an exception, but it should not make a missing required check disappear from the readiness decision.
Keep secrets and detailed exceptions out of the review display. Show a safe summary and leave diagnostic details in server logs, so the review package can be shared without exposing credentials.
Separate readiness from permission. Required checks determine whether the review is complete, while a role check determines who may create the package. Passing the checklist does not grant the user additional authority.
Complete the remaining required items and watch the count reach nine out of nine. The status changes to Ready for review. That means the checklist is complete, not that deployment has already occurred.
Create the review package and inspect its summary, including known issues and rollback information. A useful handoff tells the reviewer what is ready, what remains uncertain, and how to recover if release fails.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 9 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Deployment Review Checklist · 35 min
Objective: A controlled deployment review screen: a required/optional release checklist, environment and target selection, a role-gated review action backed by a server-side check, secrets read from secure config, a timestamped troubleshooting log, and a Package Status that turns ready only when all required checks pass.
Module 10: Capstone — Mini Helpdesk Application
The capstone of Wisej.NET Foundations. Read the lesson guide and the lab / exam guide, watch the capstone walkthrough, pass the final knowledge check, then build the mini helpdesk that ties the whole course together.
- ReadingThe Capstone Project · 9 min
What the capstone mini helpdesk must include — navigation, CRUD, dialogs, validation, theme polish — and how its pieces fit together.
- ReadingReadable Code & Peer Review · 9 min
The developer habits that keep the capstone readable, and the peer code-review focus your project is graded on.
- Video lessonBuild the Wisej.NET mini helpdesk capstone · 5 min
Watch the capstone come together — a navigation shell, ticket CRUD with a DataGridView and dialogs, validation through a service, a polished theme, and architecture/review/deployment notes. Runs right here in the player.
Narration transcript
Module ten. Build the Wisej.NET mini helpdesk. This capstone brings the course together in one application. We'll follow its navigation, ticket workflow, and supporting screens, then look at what makes the project ready for review and deployment.
Start with the completed application and follow its navigation shell. The separate course examples now share one layout, so users can move between features without learning a new navigation pattern each time.
Follow Tickets, Customers, and Jobs through their main interactions. Grids present records, dialogs collect changes, and background jobs report progress. After each action, check that the visible result explains what actually happened.
Trace a ticket change across its responsibilities. The dialog validates input, TicketService handles the operation, and the grid presents the result. Consistent labels and status messages connect those stages for the user.
Use Deployment and Architecture to explain the application beyond its screens. Review configuration, security, and logging, then trace data through the service layer. A working demonstration should also make its organization understandable.
Finish with Code Review and Next Steps. Check purposeful names and clear responsibilities, then record remaining production work. The capstone demonstrates a working application while making unfinished work and design decisions explicit.
- ReadingAI Coding Exercise · 20 min
Build this module's WisejTrainingApp sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 10 Knowledge Check · 12 min · Pass mark 80%
- Hands-on labLab — Mini Helpdesk Capstone · 60 min
Objective: A complete mini helpdesk app: a left-navigation shell (Dashboard, Tickets, Architecture, Code Review, Deployment, Next Steps), ticket CRUD with a DataGridView and reusable Create/Edit dialogs validated through a TicketService, a polished consistent theme, and architecture/review/deployment notes — demonstrating the whole course in one project.