Skip to content

About

LearnStack is a personal learning queue that helps you collect, prioritize, and turn knowledge into output.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

10 stars

Watchers

0 watching

Forks

LearnStack logo

Blazor Server application for organizing learning resources, turning them into content ideas, and sharing curated knowledge with other learners.

CI .NET 10 Blazor Server MudBlazor License: AGPL-3.0

Overview • Features • Getting started • Configuration • Deployment • Project structure • Contributing • License

Overview

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.

Hosted or self-hosted

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.

Features

Learning resource management

  • 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.

Content idea workflow

  • Create content ideas from your learning backlog.
  • Link ideas back to the source resources that inspired them.
  • Track ideas from draft to published.

Sharing and collaboration

  • Create public shared collections with unique share links.
  • Manage friendships with invitation links.
  • Share selected public resources with connected friends.

Product experience

  • 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.

Platform and deployment

  • 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.

Tech stack

  • .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

Getting Started

Prerequisites

  • .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.

Run locally

git clone https://github.com/kasuken/LearnStack.git
cd LearnStack
dotnet restore LearnStack.sln
dotnet run --project LearnStack/LearnStack.csproj

Open 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.

Build the solution

dotnet build LearnStack.sln

Configuration

The main application settings live in LearnStack/appsettings.json and LearnStack/appsettings.Development.json.

Required settings

  • 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;"

Runtime behavior

  • Database access is created through IDbContextFactory<ApplicationDbContext>.
  • Supported UI cultures are en, de, es, fr, and it.
  • Request localization uses cookie selection first, then the Accept-Language header.
  • Open Graph metadata fetching uses a dedicated HTTP client and includes YouTube oEmbed support.

Deployment

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 back

The 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.

Project structure

.
|- 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

What the app covers today

  • 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.

Contributing

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.

Security

Please do not report security vulnerabilities in public issues. Use private vulnerability reporting instead. See the Security Policy for details.

License

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.

About

LearnStack is a personal learning queue that helps you collect, prioritize, and turn knowledge into output.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

10 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages