A comprehensive ASP.NET Web Forms website for a group coaching organization, featuring content management, news, contact forms, mailing lists, and an admin panel.
Built in July 2010. This production system served a real coaching business in Israel, delivering a full web presence with multilingual content, lead capture, newsletters, and administrative tools (Hebrew/English). It remained active until decommissioning. It included real-time lead handling, newsletter automation, and a full admin workflow used by staff.
- 📄 Dynamic Content Management: Create and manage multiple pages with Hebrew/English support
- 📰 News System: Scrollable news section with date-based organization
- 📧 Contact Forms: Lead capture with email notifications
- 📮 Mailing Lists: Subscriber management with newsletter capabilities
- 🎓 Graduates Showcase: Photo gallery of program graduates
- 🗂️ Article Management: Full article creation and display system
- 🔐 Admin Panel: Comprehensive backend for site management
- 📊 Logging System: Error tracking and system monitoring
- 🌐 Multilingual: Support for Hebrew and English content
- ✉️ Email Integration: Automated notifications and newsletters
- Dynamic Content Management: Multi-page support for Hebrew and English content.
- Automated Notifications: Real-time email alerts for lead capture and contact forms.
- Newsletter Automation: Integrated mailing list management and mass email broadcast system.
- Administrative Workflow: Comprehensive backend for site-wide management and content updates.
- System Monitoring: Integrated logging and error tracking for high availability.
- Clean Data Access: Centralized DAL using LINQ-to-SQL for type-safe database operations.
- Robust Logging: Multi-channel logging system supporting both Database and File System outputs.
- Utility Framework: Global utility classes for common operations like SEO, validation, and email.
- Type Safety: Full use of strong-typed business objects and database models.
- Resource Management: Efficient handling of site assets, images, and graduate photos.
- Visual Studio Integration: Seamless development experience with Visual Studio 2010+ and .NET 3.5.
- Environment Separation: Configurable connection strings and application settings via
Web.config. - Modular Architecture: Clear separation of concerns between UI, Business Logic, and Data layers.
- Standardized UI: Master Page architecture ensures a consistent look and feel across all pages.
graph TB
subgraph "Client Side"
Browser[Web Browser]
jQuery[jQuery 1.4.2]
CSS[Custom CSS Styling]
end
subgraph "Presentation Layer"
Master[Master.master]
PublicPages[Public Pages]
AdminPages[Admin Pages]
PublicPages --> Default[Default.aspx - Home]
PublicPages --> Article[ArticlePage.aspx]
PublicPages --> Lead[LeadPage.aspx - Contact]
PublicPages --> Grads[Graduates.aspx]
AdminPages --> AdminContent[Contents Management]
AdminPages --> AdminNews[News Management]
AdminPages --> AdminLeads[Leads Management]
AdminPages --> AdminMail[MailList Management]
end
subgraph "Business Logic Layer"
CoachDal[CoachDal.cs - Data Access]
GlobalFuncs[GlobalFunctions.cs - Utilities]
Logger[Logger.cs - Error Logging]
Notifier[Notifier.cs - Email Service]
end
subgraph "Data Layer"
LinqToSQL[LINQ-to-SQL ORM]
Database[(SQL Server Database)]
LinqToSQL --> ContentTable[Content Table]
LinqToSQL --> NewsTable[News Table]
LinqToSQL --> LeadTable[Lead Table]
LinqToSQL --> MailListTable[MailList Table]
LinqToSQL --> ArticleTable[Article Table]
LinqToSQL --> GraduateTable[Graduate Table]
LinqToSQL --> LogTable[Log Table]
end
Browser --> Master
Master --> PublicPages
Master --> AdminPages
PublicPages --> CoachDal
AdminPages --> CoachDal
CoachDal --> GlobalFuncs
CoachDal --> Logger
CoachDal --> Notifier
CoachDal --> LinqToSQL
LinqToSQL --> Database
jQuery --> PublicPages
CSS --> Master
- Layered Architecture: Strict separation between Presentation (ASPX), Business Logic (App_Code), and Data (LINQ-to-SQL).
- DRY (Don't Repeat Yourself): Common logic is centralized in
GlobalFunctions.csandCoachDal.cs. - Configuration-Driven: Application behavior and environment settings are controlled via
Web.config. - Persistence Ignorance: Business logic interacts with a clean data access layer rather than raw SQL queries.
- Centralized Logging: All errors and critical events are routed through a unified
Loggerservice.
- Data Access Object (DAO): Implemented through the
CoachDalclass for all database interactions. - Singleton-like Utilities: Static utility classes for global functions and system-wide services.
- Master Page Pattern: Standard ASP.NET pattern for consistent UI layout and navigation.
- Template Method: Leveraging the ASP.NET Page lifecycle for standardized request handling.
- Windows Server or Windows 10/11
- IIS (Internet Information Services) 7.0+
- .NET Framework 3.5
- SQL Server 2008 or higher
- Visual Studio 2010+ (for development)
- Clone the repository:
git clone https://github.com/orassayag/israeli-group-coaching.git
cd israeli-group-coaching- Configure the database connection in
Web.config:
<connectionStrings>
<add name="pminsig_coachingConnectionString"
connectionString="Data Source=YOUR_SERVER;Initial Catalog=YOUR_DATABASE;User ID=YOUR_USER;Password=YOUR_PASSWORD;"
providerName="System.Data.SqlClient" />
</connectionStrings>- Update application settings in
Web.config:
<appSettings>
<add key="ErrorLogPath" value="C:\YourPath\Logs\"/>
<add key="JscriptFile" value="C:\YourPath\App_Js\JScript.js"/>
</appSettings>-
Create the database using the LINQ-to-SQL model as reference (
App_Code/CoachingDal.dbml) -
Build the solution in Visual Studio
-
Deploy to IIS and configure the application pool to use .NET Framework 3.5
- Home: View dynamic content and latest news.
- Articles: Browse and read educational coaching articles.
- Contact: Submit leads through the integrated contact form.
- Graduates: View the photo gallery of program graduates.
- Mailing List: Subscribe to the newsletter via the sidebar.
- Access at
/Admin/to manage all site content. - Update news, manage leads, and oversee the mailing list.
- View system logs and site statistics.
- Open
israeli-group-coaching.slnin Visual Studio 2010 or higher. - Ensure all references are resolved.
- Select
Build > Build Solution(Ctrl+Shift+B).
- Press
F5to start debugging with IIS Express. - Use the standard VS debugger to step through
App_Codelogic.
While this is a legacy .NET Web Forms project, the following operations are commonly used:
- Build Solution: Compiles the C# code and prepares the website for running.
- Publish Website: Prepares the site for deployment by gathering all necessary assets.
- Database Setup: Use the
CoachingDal.dbmlto generate or update the SQL Server schema.
For detailed setup instructions, see INSTRUCTIONS.md.
israeli-group-coaching/
├── Admin/ # Admin panel pages
│ ├── Articles.aspx # Article management
│ ├── Contents.aspx # Content management
│ ├── Graduates.aspx # Graduate management
│ ├── Leads.aspx # Lead viewing
│ ├── Logs.aspx # System logs
│ ├── MailLists.aspx # Mailing list management
│ └── News.aspx # News management
├── App_Code/ # Business logic
│ ├── CoachDal.cs # Data access layer
│ ├── CoachingDal.dbml # LINQ-to-SQL model
│ ├── GlobalFunctions.cs # Utility functions
│ ├── Logger.cs # Error logging
│ └── Notifier.cs # Email notifications
├── App_Js/ # JavaScript libraries
│ ├── JScript.js # Custom scripts
│ ├── jquery-1.4.2.min.js
│ └── jScrollPane.js # Scroll plugin
├── images/ # Site images and assets
├── Default.aspx # Home page
├── ArticlePage.aspx # Article display
├── LeadPage.aspx # Contact form
├── Graduates.aspx # Graduates gallery
├── Master.master # Master page template
├── Web.config # Configuration
└── style.css # Stylesheets
The CoachDal class provides centralized database operations:
- CRUD operations for all entities
- LINQ-to-SQL integration
- Transaction management
- Data validation
- GlobalFunctions: Utilities for email, validation, SEO, file operations
- Logger: Comprehensive error and event logging to database and files
- Notifier: Email notification system for leads and newsletters
- Master Page: Consistent layout with navigation, news sidebar, and mailing list signup
- Public Pages: Content display, articles, contact forms, graduate gallery
- Admin Panel: Full CRUD operations for all content types
- ASP.NET Web Forms - Web framework
- C# - Programming language
- LINQ-to-SQL - ORM and data access
- SQL Server - Database
- jQuery 1.4.2 - JavaScript library
- jScrollPane - Custom scrollbars
- IIS - Web server
- GIT - Version control
Important: This is a legacy application from 2010 containing outdated security practices:
- Security: Always use parameterized queries or LINQ-to-SQL to prevent SQL injection.
- Logging: Implement
Logger.Write()for all critical business logic and error handling. - Configuration: Store environment-specific settings (like file paths and credentials) in
Web.config. - SEO: Utilize the
GlobalFunctions.SetSeo()method for consistent meta-tag management. - Maintenance: Periodically clear the
Logsdirectory and monitor database size.
- Remove all hardcoded credentials from source files
- Enable HTTPS/SSL in production
- Implement proper authentication for admin panel
- Review and sanitize all user inputs
- Use parameterized queries throughout
- Set
customErrors mode="On"in Web.config - Consider migrating to modern .NET framework
See CONTRIBUTING.md for security best practices.
Contributions to this project are released to the public under the project's open source license.
Everyone is welcome to contribute. Contributing doesn't just mean submitting pull requests—there are many different ways to get involved, including answering questions and reporting issues.
Please see CONTRIBUTING.md for detailed guidelines.
- Or Assayag - Initial work - orassayag
- Or Assayag orassayag@gmail.com
- GitHub: https://github.com/orassayag
- StackOverflow: https://stackoverflow.com/users/4442606/or-assayag?tab=profile
- LinkedIn: https://linkedin.com/in/orassayag
- Merav Keet meravi.keet@gmail.com
This application has an MIT license - see the LICENSE file for details.
- Built for educational and research purposes
- Respects robots.txt and implements rate limiting
- Uses user-agent rotation to avoid detection
- Implements polite crawling practices