Blazor Server application for organizing learning resources, turning them into content ideas, and sharing curated knowledge with other learners.
Overview • Features • Getting started • Configuration • Deployment • Project structure • Contributing • License
LearnStack helps learners and creators manage the full path from discovery to publishing:
- Save articles, videos, podcasts, courses, and documentation in one place.
- Track progress, priorities, notes, and archived items.
- Turn saved material into structured content ideas.
- Share public collections and selected resources with other users.
- Use the app in multiple languages with light and dark themes.
The application is built with ASP.NET Core, Blazor Server, Entity Framework Core, SQL Server, MudBlazor, and ASP.NET Identity.
LearnStack is available as a hosted service at learnstack.cloud, and it's also fully open source: you can run your own instance from this repository with just a SQL Server database.
Paid features of the hosted service sit behind configuration and are off by default. Stripe billing for the Pro plan is controlled by Billing:Provider, which defaults to None, so a self-hosted instance runs without Stripe credentials. Never commit real keys; use user secrets, environment variables or a secret store.
- Capture resources by URL with automatic metadata enrichment.
- Organize items by type, status, priority, tags, and notes.
- Switch between list and table views, search, filter, archive, and export your library.
- Track progress across to-learn, in-progress, completed, and archived states.
- Create content ideas from your learning backlog.
- Link ideas back to the source resources that inspired them.
- Track ideas from draft to published.
- Create public shared collections with unique share links.
- Manage friendships with invitation links.
- Share selected public resources with connected friends.
- Localized UI in English, German, Spanish, French, and Italian.
- Light and dark theme support.
- Installable as a Progressive Web App (home-screen icons only; no offline mode).
- ASP.NET Identity authentication with passkey support.
- Terms of Service acceptance flow for signed-in users.
- SQL Server persistence through Entity Framework Core.
- Automatic database migration on application startup.
- Azure App Service deployment workflow with semantic version tagging and GitHub releases.
- .NET 10 / ASP.NET Core / Blazor Server
- Entity Framework Core 10 with SQL Server
- ASP.NET Core Identity
- MudBlazor
- HtmlAgilityPack for metadata scraping
- GitHub Actions for CI/CD and release automation
- .NET 10 SDK
- SQL Server or SQL Server LocalDB
- Git
Note
The default development configuration uses SQL Server LocalDB on Windows. If you prefer SQL Server, Azure SQL, or a containerized database, override ConnectionStrings__DefaultConnection before starting the app.
git clone https://github.com/kasuken/LearnStack.git
cd LearnStack
dotnet restore LearnStack.sln
dotnet run --project LearnStack/LearnStack.csprojOpen the HTTPS URL printed in the console and register a new account.
Important
The application applies pending Entity Framework migrations automatically on startup. Point the connection string at a database you are comfortable initializing before first run.
dotnet build LearnStack.slnThe main application settings live in LearnStack/appsettings.json and LearnStack/appsettings.Development.json.
ConnectionStrings:DefaultConnection: SQL Server connection string used by Entity Framework Core and ASP.NET Identity.
Example environment variable override:
$env:ConnectionStrings__DefaultConnection="Server=tcp:your-server.database.windows.net,1433;Initial Catalog=LearnStackDb;Persist Security Info=False;User ID=your-user;Password=your-password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"- Database access is created through
IDbContextFactory<ApplicationDbContext>. - Supported UI cultures are
en,de,es,fr, andit. - Request localization uses cookie selection first, then the
Accept-Languageheader. - Open Graph metadata fetching uses a dedicated HTTP client and includes YouTube oEmbed support.
The hosted service runs on Azure App Service. Merging to main only runs CI; production changes when a release is cut with the Release workflow:
gh workflow run release.yml -R kasuken/LearnStack -f bump=minor # patch | minor | major
gh workflow run release.yml -R kasuken/LearnStack -f redeploy=v1.4.1 # roll backThe workflow waits for CI to pass on the commit, builds once, deploys through the production environment with Azure OIDC, smoke tests /health/ready, and then tags and publishes the GitHub release. The steps are shared with the other kasuken SaaS apps; see RELEASING.md.
Hosted-only settings (for example Billing__Provider=Stripe) and all secrets are App Service application settings, never committed files.
.
|- LearnStack.sln
|- LearnStack/
| |- Components/
| | |- Marketing/ # Public landing pages
| | |- Pages/ # Authenticated application pages
| | |- Shared/ # Reusable forms, cards, dialogs, selectors
| |- Controllers/ # MVC endpoints such as culture switching
| |- Data/ # DbContext, identity user, models, migrations
| |- Resources/ # Localization resource files
| |- Services/ # Application services and metadata fetching
| |- wwwroot/ # Static assets, PWA manifest/icons, styles, scripts, logos, ToS page
|- docs/ # Deployment, release and pipeline guides
|- .github/
| |- workflows/ # Azure deployment and release automation
- Personal learning resource library
- Content idea planning pipeline
- Shared collections by link
- Friend invitations and public resource sharing
- Localization and theme support
- Installable PWA (icons and Add to Home Screen)
- Azure deployment automation
If you want to extend the project, the most natural next areas are richer collaboration, analytics, and smarter idea generation from saved resources.
Contributions are welcome! Please read the contributing guidelines and the Code of Conduct before opening a pull request. All contributors must sign the Contributor License Agreement; a bot will ask you to on your first pull request.
Please do not report security vulnerabilities in public issues. Use private vulnerability reporting instead. See the Security Policy for details.
LearnStack is licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only). If you run a modified version of LearnStack as a network service, the AGPL requires you to make your modified source code available to its users. Set SourceCodeUrl in configuration to point the in-app "Source code" link at your repository.
Third-party components and their licenses are listed in THIRD-PARTY-NOTICES.md.
"LearnStack" and the LearnStack logo are trademarks of Emanuele Bartolesi and are not licensed under the AGPL. If you publish a modified public instance, please use a different name and logo.