{"id":19820727,"url":"https://github.com/ecampidoglio/linker","last_synced_at":"2026-02-26T16:34:08.735Z","repository":{"id":27251494,"uuid":"113068067","full_name":"ecampidoglio/Linker","owner":"ecampidoglio","description":"🔗 A simple URL shortening website that serves as a nice demo application.","archived":false,"fork":false,"pushed_at":"2023-07-08T13:16:39.000Z","size":465,"stargazers_count":22,"open_issues_count":6,"forks_count":23,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-17T04:51:36.568Z","etag":null,"topics":["aspnet-core","aspnet-web-api","cake-build","demo-app","pluralsight","web-api"],"latest_commit_sha":null,"homepage":"https://lnker.net","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecampidoglio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-12-04T16:40:44.000Z","updated_at":"2023-06-13T00:49:09.000Z","dependencies_parsed_at":"2022-09-15T07:20:20.594Z","dependency_job_id":"cb1bdb49-362b-45a8-b00a-d7b1d34ed0e2","html_url":"https://github.com/ecampidoglio/Linker","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecampidoglio%2FLinker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecampidoglio%2FLinker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecampidoglio%2FLinker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecampidoglio%2FLinker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecampidoglio","download_url":"https://codeload.github.com/ecampidoglio/Linker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224255067,"owners_count":17281271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aspnet-core","aspnet-web-api","cake-build","demo-app","pluralsight","web-api"],"created_at":"2024-11-12T10:24:29.146Z","updated_at":"2026-02-26T16:34:08.700Z","avatar_url":"https://github.com/ecampidoglio.png","language":"C#","readme":"# Linker ![](https://github.com/ecampidoglio/Linker/blob/master/Icon.png)\n\n|  Azure Pipelines | AppVeyor | GitHub Actions | Travis CI | Coveralls |\n|  :-------------: | :------: | :------------: | :-------: | :-------: |\n| [![Azure Pipelines](https://img.shields.io/azure-devops/build/megakemp/24a2406e-4c2e-40a4-a766-7ad55e45178f/3.svg)](https://megakemp.visualstudio.com/Linker/_build/latest?definitionId=3\u0026branchName=master) | [![AppVeyor](https://img.shields.io/appveyor/ci/ecampidoglio/linker.svg)](https://ci.appveyor.com/project/ecampidoglio/linker) | [![GitHub Actions](https://github.com/ecampidoglio/Linker/workflows/Build/badge.svg)](https://github.com/ecampidoglio/Linker/actions?workflow=Build) | [![Travis CI](https://img.shields.io/travis/ecampidoglio/Linker.svg)](https://travis-ci.org/ecampidoglio/Linker) | [![Coveralls](https://coveralls.io/repos/github/ecampidoglio/Linker/badge.svg?branch=master)](https://coveralls.io/github/ecampidoglio/Linker?branch=master) |\n\nLinker is a _really_ simple web-based URL shortening service.\n\n## Background\n\nWhen I set out to create a [Pluralsight course](http://bit.ly/ps-cake) about my favorite build tool, [Cake](https://cakebuild.net), I needed a sample app for my demos. The idea behind the course was to take an existing web app and show you how to use Cake to create a *build* and *deployment* pipeline for it from scratch. By the end, you'd have a Cake script that can take the application all the way from source code to software running on a server. That idea eventually turned into [*Building and Deploying Applications with Cake*](http://bit.ly/ps-cake), which you can read more about [here](https://megakemp.com/2017/10/20/cake-at-pluralsight/).\n\nRight from the start, I had three requirements for my demo app:\n\n1. Be simple\n2. Be realistic\n3. Don't be boring\n\nI wanted an app that *felt* realistic—alas, not the usual ASP.NET MVC sample app—but that was also simple enough not to become a [cognitive burden](https://en.wikipedia.org/wiki/Cognitive_load). The last thing you want in a course is having to spend half the time explaining what your demo app does.\n\nI could have gone for one of the classics like the fake CRM or the online pet store, but that would be boring. Remember, I wanted to do something *fun* and, possibly, *useful*.\n\nSo, I decided to make a URL shortening service: meet [Linker](https://lnker.net).\n\n## Overview\n\nLinker consists of a RESTful API backed by a relational database and consumed by a web frontend. Here's an overview:\n\n![Linker's Architecture](https://megakemp.com/assets/cake-at-pluralsight/demo-application.png)\n\nThis repository contains the complete source code, with tests and everything. There's also the complete [build and deployment script](https://github.com/ecampidoglio/Linker/blob/53dfd94147e6ea9f408190901eeefb6332cc57b2/build.cake) written with Cake.\n\n## Platform\n\nCake is cross-platform and so is Linker. Originally, I wrote two versions of it:\n\n* One that runs only on Windows on top of the [.NET Framework](https://docs.microsoft.com/en-us/dotnet/framework/)\n* One that runs on Windows, macOS or Linux built on top of [.NET Core](https://docs.microsoft.com/en-us/dotnet/core/get-started)\n\nYou'll find the Windows-only version in the [`pluralsight-net4.6`](https://github.com/ecampidoglio/Linker/tree/pluralsight-net4.6) branch, while the cross-platform one is in a branch called [`pluralsight-netcore1.0`](https://github.com/ecampidoglio/Linker/tree/pluralsight-netcore1.0). These are the exact versions featured in the [Pluralsight course](http://bit.ly/ps-cake) and will stay as they are for reference.\n\nAs time went on, however, I realized that if Linker was going to stay valuable, it had to be kept up-to-date with the current technology. So, I eventually upgraded the .NET Core version from 1.0 to [2.1 LTS](https://devblogs.microsoft.com/dotnet/announcing-net-core-2-1/).\n\n.NET Core is clearly the future when it comes to .NET development; it's also cross-platform, leaving little value in maintaining a separate version that only runs on Windows. For these reasons, I decided to make the .NET Core 2.1 version the _canonical version_ by [merging it](https://github.com/ecampidoglio/Linker/commit/08a80e5dce4f7a10f0725a589e53598d12f0483e) into `master`. That became the officially maintained version of Linker going forward.\n\n## What to Do with It\n\nAlthough Linker came into existence to serve the needs of my Pluralsight course [Building and Deploying Applications with Cake](http://bit.ly/ps-cake), it has proven to be equally useful for other educational purposes. In fact, I'll go as far as to say that if you ever find yourself in need of a demo app for a course, a talk or a workshop, feel free to use Linker. To put in one sentence:\n\n\u003e Linker is a simple and complete ASP.NET Core web application, ready to go. :rocket:\n\nOf course, if you would like to improve it in any way, pull requests are always welcome.\n\n## Additional Resources\n\nYou can see Linker in action in the following online resources:\n\n- [Building and Deploying Applications with Cake](https://www.pluralsight.com/courses/cake-applications-deploying-building) (Pluralsight Course)\n- [Cake + .NET Core = Write Once, Build Anywhere](https://youtu.be/FKbykwvB_MU) (NDC London 2018 Conference Talk)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecampidoglio%2Flinker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fecampidoglio%2Flinker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecampidoglio%2Flinker/lists"}