From 9b8ecba505910367fb2b7c76e3776035f4d85b73 Mon Sep 17 00:00:00 2001 From: leogdion Date: Thu, 27 Aug 2020 13:30:39 -0400 Subject: [PATCH 01/11] Delete orchardnest.sql --- orchardnest.sql | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 orchardnest.sql diff --git a/orchardnest.sql b/orchardnest.sql deleted file mode 100644 index e69de29..0000000 From 359034ea4b79f4067df9c6fed944ff056ebeb855 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Thu, 27 Aug 2020 16:04:27 -0400 Subject: [PATCH 02/11] adding error pages #33 --- Resources/Views/404.md | 5 ++++ Sources/OrchardNestServer/Configurator.swift | 5 +++- .../Controllers/Routing/HTMLController.swift | 26 ++++++++++++++----- 3 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 Resources/Views/404.md diff --git a/Resources/Views/404.md b/Resources/Views/404.md new file mode 100644 index 0000000..73d0e10 --- /dev/null +++ b/Resources/Views/404.md @@ -0,0 +1,5 @@ +--- +description: Page Not Found +--- + +# Sorry this page hasn't been found :( diff --git a/Sources/OrchardNestServer/Configurator.swift b/Sources/OrchardNestServer/Configurator.swift index e97ea33..96412f1 100644 --- a/Sources/OrchardNestServer/Configurator.swift +++ b/Sources/OrchardNestServer/Configurator.swift @@ -19,6 +19,9 @@ public final class Configurator: ConfiguratorProtocol { // ///// Called before your application initializes. public func configure(_ app: Application) throws { + let html = HTMLController(markdownDirectory: app.directory.viewsDirectory) + app.middleware = .init() + app.middleware.use(ErrorPageMiddleware(htmlController: html)) app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory)) // Configure a SQLite database @@ -69,7 +72,7 @@ public final class Configurator: ConfiguratorProtocol { let api = app.grouped("api", "v1") - try app.register(collection: HTMLController(markdownDirectory: app.directory.viewsDirectory)) + try app.register(collection: html) try api.grouped("entires").register(collection: EntryController()) try api.grouped("channels").register(collection: ChannelController()) try api.grouped("categories").register(collection: CategoryController()) diff --git a/Sources/OrchardNestServer/Controllers/Routing/HTMLController.swift b/Sources/OrchardNestServer/Controllers/Routing/HTMLController.swift index 4b51468..7e3b203 100644 --- a/Sources/OrchardNestServer/Controllers/Routing/HTMLController.swift +++ b/Sources/OrchardNestServer/Controllers/Routing/HTMLController.swift @@ -80,13 +80,9 @@ struct HTMLController { } } - func page(req: Request) -> EventLoopFuture { - guard let name = req.parameters.get("page") else { - return req.eventLoop.makeFailedFuture(Abort(.notFound)) - } - + func view(_ name: String) throws -> HTML { guard let view = views[name] else { - return req.eventLoop.makeFailedFuture(Abort(.notFound)) + throw Abort(.notFound) } let html = HTML( @@ -111,6 +107,16 @@ struct HTMLController { ) ) + return html + } + + func page(req: Request) throws -> EventLoopFuture { + guard let name = req.parameters.get("page") else { + return req.eventLoop.makeFailedFuture(Abort(.notFound)) + } + + let html = try view(name) + return req.eventLoop.future(html) } @@ -259,5 +265,13 @@ extension HTMLController: RouteCollection { routes.get(":page", use: page) routes.get("channels", ":channel", use: channel) routes.get("sitemap.xml", use: sitemap) +// routes.get("**", use: { (request) -> EventLoopFuture in +// guard let page = try? self.view("404") else { +// throw Abort(.notFound) +// } +// +// +// return page.encodeResponse(status: .notFound, for: request) +// }) } } From 93cf4ec39ff0afe697cb89050c905a8d1c26cf3f Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Thu, 27 Aug 2020 19:12:05 -0400 Subject: [PATCH 03/11] fixing CI --- Resources/Views/500.md | 7 +++ .../ErrorPageMiddleware.swift | 45 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Resources/Views/500.md create mode 100644 Sources/OrchardNestServer/ErrorPageMiddleware.swift diff --git a/Resources/Views/500.md b/Resources/Views/500.md new file mode 100644 index 0000000..c564077 --- /dev/null +++ b/Resources/Views/500.md @@ -0,0 +1,7 @@ +--- +description: System Error +--- + +# Oh No! + +Looks like there's an error with this page. Feel free to report the error [here.](https://github.com/brightdigit/OrchardNest/issues/new?labels=system-error) diff --git a/Sources/OrchardNestServer/ErrorPageMiddleware.swift b/Sources/OrchardNestServer/ErrorPageMiddleware.swift new file mode 100644 index 0000000..3ba72f9 --- /dev/null +++ b/Sources/OrchardNestServer/ErrorPageMiddleware.swift @@ -0,0 +1,45 @@ +import Plot +import Vapor + +public struct ErrorPageMiddleware: Middleware { + let htmlController: HTMLController + + public func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture { + next.respond(to: request).flatMapAlways { result in + let code: UInt + let viewName: String + let html: HTML + let response: Response? + do { + let resp = try result.get() + code = resp.status.code + response = resp + } catch { + if let abort = error as? AbortError { + code = abort.status.code + } else { + code = HTTPStatus.internalServerError.code + } + response = nil + } + switch (response, code) { + case (_, 404): + viewName = "404" + case (let .some(response), 0 ..< HTTPStatus.badRequest.code): + return response.encodeResponse(for: request) + default: + viewName = "500" + } + + do { + html = try htmlController.view(viewName) + } catch { + let body = "

Internal Error

There was an internal error. Please try again later.

" + request.logger.error("Failed to render custom error page - \(error)") + return body.encodeResponse(status: .internalServerError, for: request) + } + let status = response?.status ?? .internalServerError + return html.encodeResponse(status: status, for: request) + } + } +} From 259638d8761672d4fcdb5dc5b7cdfa0894d7aaf8 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Thu, 27 Aug 2020 20:03:14 -0400 Subject: [PATCH 04/11] adding images and header to readme #16 --- Public/images/wordmark.png | Bin 0 -> 81743 bytes Public/images/wordmark.svg | 108 +++++++++++++++++++++++++++++++++++++ README.md | 8 ++- 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 Public/images/wordmark.png create mode 100644 Public/images/wordmark.svg diff --git a/Public/images/wordmark.png b/Public/images/wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e57981f130dacdfe7b3d66aa497b756886408c4d GIT binary patch literal 81743 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
0Dl}#g1gu9>s|v3-^8brR`=| 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/README.md b/README.md index 4612b45..f1a1786 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -# OrchardNest +  + +   + + + +# Swift Articles and News at _[orchardnest.com](https://orchardnest.com)_ [![SwiftPM](https://img.shields.io/badge/SPM-Linux%20%7C%20iOS%20%7C%20macOS%20%7C%20watchOS%20%7C%20tvOS-success?logo=swift)](https://swift.org) [![Twitter](https://img.shields.io/badge/twitter-@leogdion-blue.svg?style=flat)](http://twitter.com/leogdion) From 82783fa12eb387daba33083f3fb087a9d867a7eb Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Thu, 27 Aug 2020 20:35:30 -0400 Subject: [PATCH 05/11] fixing README #16 --- README.md | 118 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 94 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index f1a1786..60278ca 100644 --- a/README.md +++ b/README.md @@ -24,27 +24,97 @@ [![Code Climate issues](https://img.shields.io/codeclimate/issues/brightdigit/OrchardNest)](https://codeclimate.com/github/brightdigit/OrchardNest) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) -# Requirements - -* [CocoaPods](https://cocoapods.org) -* [XCodeGen](https://github.com/yonaskolb/XcodeGen) -* [SourceDocs](https://github.com/eneko/SourceDocs) - -# How to get started - -1. [Use the template](https://github.com/brightdigit/EggSeed/generate) -2. Run [`./setup.sh`](https://github.com/brightdigit/EggSeed/blob/master/setup.sh) once you have your own repo. -3. It will create the corresponding files for your Swift Package/Cocoapod/Carthage. -4. Customize by - * updating Package.swift - * supported OSes in Pod spec - * update [SwiftFormat](https://github.com/brightdigit/EggSeed/blob/master/.swiftformat) and [SwiftLint](https://github.com/brightdigit/EggSeed/blob/master/.swiftlint.yml) settings - * Add Documentation and Notes to README.md - * update [travis-ci](https://github.com/brightdigit/EggSeed/blob/master/.travis.yml) or [github actions files](https://github.com/brightdigit/EggSeed/tree/master/.github/workflows) - * integrate third-party analysis services and badges such as [CodeCov](https://codecov.io), [CodeClimate](https://codeclimate.com), [CodeFactor](https://www.codefactor.io/dashboard), [Hound](https://houndci.com) -5. Code Away! -5. Add to [SwiftPM](https://github.com/daveverwer/SwiftPMLibrary) - -# DESCRIPTION HERE - -[Documentation Here](/docs/README.md) +## 🧐 About + +**OrchardNest is a site built by Leo Dion and dedicated to the Swift and Apple Developer community by providing a source for news, tutorials, podcasts, YouTube videos, and other updates.** + +**Based on the wonderful [iOS Dev Directory by Dave Verwer](https://iosdevdirectory.com)**, this aggreates, filters, curates the variety of RSS feeds availables from developers, designers, podcasters, youtubers and newsletters. + +## 🏁 Getting Started +Here's how to get the server up and running... + +### Prerequisites +What things you need to install the software and how to install them. + +#### PostgreSQL Server 12.2 +Either via server install or docker. + +``` +docker run --rm --name orchardnest-pg -e POSTGRES_HOST_AUTH_METHOD=trust -d -p 5432:5432 +``` + +Create the database by running the `create_db.sql` script: + +``` +psql -h localhost -U postgres < create_db.sql +``` + +#### Swift 5.2 + +For details on installing Swift 5.2, check out [the instructions from swift.org.](https://swift.org/getting-started/) + + + + +## ⛏️ Built Using + +* [Server-Side Swift with Vapor 4](https://vapor.codes) +* PostgreSQL Database with Fluent for Vapor +* [Job Queue via Vapor Queues Fluent Driver](https://github.com/m-barthelemy/vapor-queues-fluent-driver) by [Matthieu BarthΓ©lemy](https://github.com/m-barthelemy) +* [Plot by John Sundell](https://github.com/johnsundell/plot) for HTML Rendering +* [Ink by John Sundell](https://github.com/JohnSundell/Ink) for Markdown Parsing +* [Milligram for CSS](https://milligram.io) +* [Elusive Icons for Icons](http://elusiveicons.com) + +## ✍️ Authors +- [@leogdion](https://github.com/leogdion) - Idea & Initial work + + \ No newline at end of file From 4c365d4436a04c7b517d51181944bc5706d59a64 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Thu, 27 Aug 2020 22:02:32 -0400 Subject: [PATCH 06/11] fixing youtube issues --- Sources/OrchardNestServer/RefreshJob.swift | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Sources/OrchardNestServer/RefreshJob.swift b/Sources/OrchardNestServer/RefreshJob.swift index d2a92f7..9afda7b 100644 --- a/Sources/OrchardNestServer/RefreshJob.swift +++ b/Sources/OrchardNestServer/RefreshJob.swift @@ -282,9 +282,12 @@ struct RefreshJob: ScheduledJob, Job { // save videos to entries let futYTVideos = futureEntries.flatMap { (entries) -> EventLoopFuture<[YoutubeVideo]> in - entries + let possibleVideos = entries .compactMap { $0.feedItem.ytId } - .chunked(by: 50) + + context.logger.info("parsing \(possibleVideos.count) videos") + + return possibleVideos.chunked(by: 50) .map(Self.queryURL(forYouTubeWithIds:)) .map { client.get($0) } .flatten(on: client.eventLoop) @@ -295,7 +298,8 @@ struct RefreshJob: ScheduledJob, Job { }.map { (arrays: [[(String, TimeInterval)]]) -> [(String, TimeInterval)] in arrays.flatMap { $0 } }.map([String: TimeInterval].init(uniqueKeysWithValues:)).map { durations in - entries.compactMap { (entry) -> YoutubeVideo? in + + let youtubeVideos = entries.compactMap { (entry) -> YoutubeVideo? in guard let id = entry.entry.id else { return nil } @@ -307,7 +311,10 @@ struct RefreshJob: ScheduledJob, Job { } return YoutubeVideo(entryId: id, youtubeId: youtubeId, seconds: Int(duration.rounded())) } + context.logger.info("upserting \(youtubeVideos.count) videos") + return youtubeVideos } + }.recover { _ in [YoutubeVideo]() } .flatMapEach(on: database.eventLoop) { newVideo in YoutubeVideo.upsert(newVideo, on: database) From 5ac5442af2fb39c0ed79811a649743df6b6c053c Mon Sep 17 00:00:00 2001 From: leogdion Date: Fri, 28 Aug 2020 12:19:10 -0400 Subject: [PATCH 07/11] fixing issue with missing `self` --- Sources/OrchardNestServer/ErrorPageMiddleware.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/OrchardNestServer/ErrorPageMiddleware.swift b/Sources/OrchardNestServer/ErrorPageMiddleware.swift index 3ba72f9..efb9378 100644 --- a/Sources/OrchardNestServer/ErrorPageMiddleware.swift +++ b/Sources/OrchardNestServer/ErrorPageMiddleware.swift @@ -32,7 +32,7 @@ public struct ErrorPageMiddleware: Middleware { } do { - html = try htmlController.view(viewName) + html = try self.htmlController.view(viewName) } catch { let body = "

Internal Error

There was an internal error. Please try again later.

" request.logger.error("Failed to render custom error page - \(error)") From 04b40e625f64097d8e462587e79ea40b007650c2 Mon Sep 17 00:00:00 2001 From: leogdion Date: Fri, 28 Aug 2020 13:07:06 -0400 Subject: [PATCH 08/11] Update README.md --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 60278ca..db73116 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@   -   +   @@ -89,14 +89,47 @@ Give an example ``` ---> - +Here's the current deployment setup for **OrchardNest**: + +* **Linode** for hosting on a ... +* With **Ubuntu 20.04.1** installed, along with +* Using **PostgreSQL Server 12.2** for the database +* **nginx 1.18.0** for the http server +* **supervisord 4.1.0** for managing processes +* **Cloudflare** for help with caching and serving content + +Futher details on the server configuration files can be found in [the Configuration directory](Configuration). + ## ⛏️ Built Using * [Server-Side Swift with Vapor 4](https://vapor.codes) @@ -110,11 +143,10 @@ Add additional notes about how to deploy this on a live system. ## ✍️ Authors - [@leogdion](https://github.com/leogdion) - Idea & Initial work - \ No newline at end of file +Thank you to... + +- [Dave Verwer](https://github.com/daveverwer/) for [iOS Dev Weekly](https://iosdevweekly.com), [Swift Package Index](https://swiftpackageindex.com), but most importantly the **(iOS Dev Directory,)[https://iosdevdirectory.com]** which OrchardNest uses to gather content from the community +- [John Sundell](https://github.com/JohnSundell) for Publish but also the components **OrchardNest** uses [Ink](https://github.com/JohnSundell/Ink) and [Plot](https://github.com/JohnSundell/Plot) for helping render our beautiful web site +- **[The Vapor team](https://github.com/vapor)** for making a solid server-side framework for Swift developers +- **[Linode](https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7)** for hosting this great site From 7f5bd48082bbceaf203f16c9083db43a4753cf0e Mon Sep 17 00:00:00 2001 From: leogdion Date: Fri, 28 Aug 2020 13:12:31 -0400 Subject: [PATCH 09/11] fixing iOS Dev Directory link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index db73116..794489b 100644 --- a/README.md +++ b/README.md @@ -146,7 +146,7 @@ Futher details on the server configuration files can be found in [the Configurat ## πŸŽ‰ Acknowledgements Thank you to... -- [Dave Verwer](https://github.com/daveverwer/) for [iOS Dev Weekly](https://iosdevweekly.com), [Swift Package Index](https://swiftpackageindex.com), but most importantly the **(iOS Dev Directory,)[https://iosdevdirectory.com]** which OrchardNest uses to gather content from the community +- [Dave Verwer](https://github.com/daveverwer/) for [iOS Dev Weekly](https://iosdevweekly.com), [Swift Package Index](https://swiftpackageindex.com), but most importantly the **[iOS Dev Directory](https://iosdevdirectory.com)** which OrchardNest uses to gather content from the community - [John Sundell](https://github.com/JohnSundell) for Publish but also the components **OrchardNest** uses [Ink](https://github.com/JohnSundell/Ink) and [Plot](https://github.com/JohnSundell/Plot) for helping render our beautiful web site - **[The Vapor team](https://github.com/vapor)** for making a solid server-side framework for Swift developers - **[Linode](https://www.linode.com/?r=97e09acbd5d304d87dadef749491d245e71c74e7)** for hosting this great site From 3c5cabf68e29ba9b5cc3c078109588f97f645205 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Fri, 28 Aug 2020 13:54:32 -0400 Subject: [PATCH 10/11] completed #33 --- Public/robots.txt | 4 ++++ Resources/Views/404.md | 2 +- Resources/Views/500.md | 4 +++- Resources/Views/privacy-policy.md | 15 +++++++++++++++ Sources/OrchardNestServer/RefreshJob.swift | 8 ++++---- 5 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 Resources/Views/privacy-policy.md diff --git a/Public/robots.txt b/Public/robots.txt index e69de29..0375cbf 100644 --- a/Public/robots.txt +++ b/Public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: /api/ + +Sitemap: https://orchardnest.com/sitemap.xml \ No newline at end of file diff --git a/Resources/Views/404.md b/Resources/Views/404.md index 73d0e10..986244e 100644 --- a/Resources/Views/404.md +++ b/Resources/Views/404.md @@ -2,4 +2,4 @@ description: Page Not Found --- -# Sorry this page hasn't been found :( +# πŸ₯Ί Sorry this page hasn't been found πŸ”Ž diff --git a/Resources/Views/500.md b/Resources/Views/500.md index c564077..08f842d 100644 --- a/Resources/Views/500.md +++ b/Resources/Views/500.md @@ -2,6 +2,8 @@ description: System Error --- -# Oh No! +# 😱 Oh No! 😱 Looks like there's an error with this page. Feel free to report the error [here.](https://github.com/brightdigit/OrchardNest/issues/new?labels=system-error) + +Thanks! diff --git a/Resources/Views/privacy-policy.md b/Resources/Views/privacy-policy.md new file mode 100644 index 0000000..b4e208d --- /dev/null +++ b/Resources/Views/privacy-policy.md @@ -0,0 +1,15 @@ +--- +description: Privacy Policy +--- + +# Privacy Policy + +## Gathering Articles + +The content from this site are entirely generated from the listing on the [iOS Dev Directory](https://iosdevdirectory.com/). If you are the owner of a site which is listed here and would like it to be removed, see the details [here on how to remove yourself from that list.](https://iosdevdirectory.com/privacy/) If you wish to removed only from OrchardNest, then you can [file an issue here.](https://github.com/brightdigit/OrchardNest/issues/new?labels=remove-site) + +For more information, check out [our support page.](/support) + +## Tracking Traffic + + diff --git a/Sources/OrchardNestServer/RefreshJob.swift b/Sources/OrchardNestServer/RefreshJob.swift index 9afda7b..99067cc 100644 --- a/Sources/OrchardNestServer/RefreshJob.swift +++ b/Sources/OrchardNestServer/RefreshJob.swift @@ -284,9 +284,9 @@ struct RefreshJob: ScheduledJob, Job { let futYTVideos = futureEntries.flatMap { (entries) -> EventLoopFuture<[YoutubeVideo]> in let possibleVideos = entries .compactMap { $0.feedItem.ytId } - + context.logger.info("parsing \(possibleVideos.count) videos") - + return possibleVideos.chunked(by: 50) .map(Self.queryURL(forYouTubeWithIds:)) .map { client.get($0) } @@ -298,7 +298,7 @@ struct RefreshJob: ScheduledJob, Job { }.map { (arrays: [[(String, TimeInterval)]]) -> [(String, TimeInterval)] in arrays.flatMap { $0 } }.map([String: TimeInterval].init(uniqueKeysWithValues:)).map { durations in - + let youtubeVideos = entries.compactMap { (entry) -> YoutubeVideo? in guard let id = entry.entry.id else { return nil @@ -314,7 +314,7 @@ struct RefreshJob: ScheduledJob, Job { context.logger.info("upserting \(youtubeVideos.count) videos") return youtubeVideos } - + }.recover { _ in [YoutubeVideo]() } .flatMapEach(on: database.eventLoop) { newVideo in YoutubeVideo.upsert(newVideo, on: database) From 281c9af2b38f738e2044f65f576d781060f81d21 Mon Sep 17 00:00:00 2001 From: Leo Dion Date: Fri, 28 Aug 2020 14:12:23 -0400 Subject: [PATCH 11/11] adding privacy policy --- Resources/Views/privacy-policy.md | 4 +++- Sources/OrchardNestServer/HTML.swift | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Resources/Views/privacy-policy.md b/Resources/Views/privacy-policy.md index b4e208d..d31ef4f 100644 --- a/Resources/Views/privacy-policy.md +++ b/Resources/Views/privacy-policy.md @@ -4,6 +4,8 @@ description: Privacy Policy # Privacy Policy +Currently this privacy policy is rather simple. If you have any further questions, please see [our support page.](/support) + ## Gathering Articles The content from this site are entirely generated from the listing on the [iOS Dev Directory](https://iosdevdirectory.com/). If you are the owner of a site which is listed here and would like it to be removed, see the details [here on how to remove yourself from that list.](https://iosdevdirectory.com/privacy/) If you wish to removed only from OrchardNest, then you can [file an issue here.](https://github.com/brightdigit/OrchardNest/issues/new?labels=remove-site) @@ -12,4 +14,4 @@ For more information, check out [our support page.](/support) ## Tracking Traffic - +[Google Analytics](https://analytics.google.com/analytics/web/) is used to to gather basic analytics data. No other analytics, trackers or cookies are used. diff --git a/Sources/OrchardNestServer/HTML.swift b/Sources/OrchardNestServer/HTML.swift index b368081..9e720f2 100644 --- a/Sources/OrchardNestServer/HTML.swift +++ b/Sources/OrchardNestServer/HTML.swift @@ -226,7 +226,14 @@ public extension Node where Context == HTML.BodyContext { .text("Bright Digit, LLC") ), .text(". Copyright Β©"), - .year() + .year(), + .text(". ") + ), + .span( + .a( + .href("/privacy-policy"), + .text("Privacy Policy") + ) ) ) )