From 3009b055e6c361aee2f700c997b6ed2ad7cfca33 Mon Sep 17 00:00:00 2001 From: Thibault Le Ouay Date: Sat, 12 Aug 2023 16:15:00 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=A8=E2=80=8D=E2=9A=96=EF=B8=8F=20Some?= =?UTF-8?q?=20boring=20legal=20info=20(#176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * πŸ‘¨β€βš–οΈ * πŸ› * ✏️ * πŸ’… add layout --- apps/web/contentlayer.config.ts | 3 +- apps/web/src/app/legal/[slug]/layout.tsx | 11 +++ apps/web/src/app/legal/[slug]/page.tsx | 40 ++++++++ apps/web/src/components/layout/footer.tsx | 11 +++ apps/web/src/content/legal/privacy.mdx | 41 ++++++++ apps/web/src/content/legal/terms.mdx | 99 ++++++++++++++++++++ apps/web/src/contentlayer/documents/legal.ts | 23 +++++ apps/web/src/middleware.ts | 1 + 8 files changed, 228 insertions(+), 1 deletion(-) create mode 100644 apps/web/src/app/legal/[slug]/layout.tsx create mode 100644 apps/web/src/app/legal/[slug]/page.tsx create mode 100644 apps/web/src/content/legal/privacy.mdx create mode 100644 apps/web/src/content/legal/terms.mdx create mode 100644 apps/web/src/contentlayer/documents/legal.ts diff --git a/apps/web/contentlayer.config.ts b/apps/web/contentlayer.config.ts index 1658bc06b..4d1baa1ee 100644 --- a/apps/web/contentlayer.config.ts +++ b/apps/web/contentlayer.config.ts @@ -2,13 +2,14 @@ import { makeSource } from "contentlayer/source-files"; import rehypeSlug from "rehype-slug"; import remarkGfm from "remark-gfm"; +import { LegalPost } from "./src/contentlayer/documents/legal"; import { Post } from "./src/contentlayer/documents/post"; import autolinkHeadings from "./src/contentlayer/plugins/autolink-headings"; import prettyCode from "./src/contentlayer/plugins/pretty-code"; export default makeSource({ contentDirPath: "src/content/", - documentTypes: [Post], + documentTypes: [Post, LegalPost], mdx: { remarkPlugins: [remarkGfm], rehypePlugins: [rehypeSlug, prettyCode, autolinkHeadings], diff --git a/apps/web/src/app/legal/[slug]/layout.tsx b/apps/web/src/app/legal/[slug]/layout.tsx new file mode 100644 index 000000000..fe800ca92 --- /dev/null +++ b/apps/web/src/app/legal/[slug]/layout.tsx @@ -0,0 +1,11 @@ +import * as React from "react"; + +import { MarketingLayout } from "@/components/layout/marketing-layout"; + +export default function BlogLayout({ + children, +}: { + children: React.ReactNode; +}) { + return {children}; +} diff --git a/apps/web/src/app/legal/[slug]/page.tsx b/apps/web/src/app/legal/[slug]/page.tsx new file mode 100644 index 000000000..7e7dcf040 --- /dev/null +++ b/apps/web/src/app/legal/[slug]/page.tsx @@ -0,0 +1,40 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { allLegalPosts } from "contentlayer/generated"; + +import { Mdx } from "@/components/content/mdx"; +import { Shell } from "@/components/dashboard/shell"; +import { BackButton } from "@/components/layout/back-button"; + +export const dynamic = "force-static"; + +export async function generateStaticParams() { + return allLegalPosts.map((post) => ({ + slug: post.slug, + })); +} + +export default function PostPage({ params }: { params: { slug: string } }) { + const post = allLegalPosts.find((post) => post.slug === params.slug); + + if (!post) { + notFound(); + } + + // TODO: add author.avatar and author.url + return ( + <> + + +
+
+

{post.title}

+
+
+ +
+
+
+ + ); +} diff --git a/apps/web/src/components/layout/footer.tsx b/apps/web/src/components/layout/footer.tsx index 80b24924a..2f9e89825 100644 --- a/apps/web/src/components/layout/footer.tsx +++ b/apps/web/src/components/layout/footer.tsx @@ -1,3 +1,5 @@ +import Link from "next/link"; + export function Footer() { return ( ); } diff --git a/apps/web/src/content/legal/privacy.mdx b/apps/web/src/content/legal/privacy.mdx new file mode 100644 index 000000000..2607bfc6d --- /dev/null +++ b/apps/web/src/content/legal/privacy.mdx @@ -0,0 +1,41 @@ +--- +title: Privacy Policy +updatedAt: 2023-05-29 +--- + +Welcome to [openstatus.dev](/) (the "Site"), hosted by OpenStatus ("OpenStatus", +"we", "us", and/or "our"). OpenStatus provides a platform for creating and +managing short links (the "Services")​1​. We value your privacy and are +dedicated to protecting your personal data. This Privacy Policy covers how we +collect, handle, and disclose personal data on our Platform. + +If you have any questions, comments, or concerns regarding this Privacy Policy, +our data practices, or would like to exercise your rights, do not hesitate to +contact us. + +## To Whom Does This Policy Apply + +This Privacy Policy applies to customers and site visitors. Each customer is +responsible for posting its own terms, conditions, and privacy policies, and +ensuring compliance with all applicable laws and regulations. + +## Changes To This Privacy Policy + +This Privacy Policy may change from time to time, as our Platform and our +business may change. Your continued use of the Platform after any changes to +this Privacy Policy indicates your agreement with the terms of the revised +Privacy Policy. + +## What Information Do We Collect + +We collect information directly from you when you provide it to us explicitly on +our Site. We do not use third-party cookies on our Site. + +## What We Use Your Information For + +We use your information to provide our Services, to improve our Platform, to +understand how you use our Platform, and to communicate with you. + +## How To Contact Us + +For privacy-related questions, please contact us at privacy@openstatus.dev. diff --git a/apps/web/src/content/legal/terms.mdx b/apps/web/src/content/legal/terms.mdx new file mode 100644 index 000000000..101b5145f --- /dev/null +++ b/apps/web/src/content/legal/terms.mdx @@ -0,0 +1,99 @@ +--- +title: Terms of Service +updatedAt: 2023-05-29 +--- + +Subject to these Terms of Service (this "Agreement"), [openstatus.dev](/) +("OpenStatus", "we", "us" and/or "our") provides access to OpenStatus's cloud +platform as a service (collectively, the "Services"). By using or accessing the +Services, you acknowledge that you have read, understand, and agree to be bound +by this Agreement. + +If you are entering into this Agreement on behalf of a company, business or +other legal entity, you represent that you have the authority to bind such +entity to this Agreement, in which case the term "you" shall refer to such +entity. If you do not have such authority, or if you do not agree with this +Agreement, you must not accept this Agreement and may not use the Services. + +## 1. Acceptance of Terms + +By signing up and using the services provided by OpenStatus (referred to as the +"Service"), you are agreeing to be bound by the following terms and conditions +("Terms of Service"). The Service is owned and operated by OpenStatus ("Us", +"We", or "Our"). + +## 2. Description of Service + +OpenStatus provides an open source monitoring and status page tool. ("the +Product"). The Product is accessible at openstatus.dev and other domains and +subdomains controlled by Us (collectively, "the Website"). + +## 3. Fair Use + +You are responsible for your use of the Service and for any content that you +post or transmit through the Service. You may not use the Service for any +purpose that is illegal or infringes upon the rights of others. + +We reserve the right to suspend or terminate your access to the Service if we +determine, in our sole discretion, that you have violated these Terms of +Service, including but not limited to, adding phishing links, spam links, scam +links, or other inappropriate or illegal content. + +## 4. Intellectual Property Rights + +You acknowledge and agree that the Service and its entire contents, features, +and functionality, including but not limited to all information, software, code, +text, displays, graphics, photographs, video, audio, design, presentation, +selection, and arrangement, are owned by Us, our licensors, or other providers +of such material and are protected by United States and international copyright, +trademark, patent, trade secret, and other intellectual property or proprietary +rights laws. + +## 5. Changes to these Terms + +We reserve the right to revise and update these Terms of Service from time to +time in our sole discretion. All changes are effective immediately when we post +them, and apply to all access to and use of the Website thereafter. Your +continued use of the Website following the posting of revised Terms of Service +means that you accept and agree to the changes. + +## 6. Contact Information + +Questions or comments about the Website or these Terms of Service may be +directed to our support team at support@openstatus.dev. + +## 7. Disclaimer of Warranties + +THE SERVICE AND ITS CONTENT ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS +WITHOUT ANY WARRANTIES OF ANY KIND. WE DISCLAIM ALL WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE WARRANTY OF TITLE, MERCHANTABILITY, NON-INFRINGEMENT OF +THIRD PARTIES’ RIGHTS, AND FITNESS FOR PARTICULAR PURPOSE. + +## 8. Limitation of Liability + +IN NO EVENT WILL WE, OUR AFFILIATES OR THEIR LICENSORS, SERVICE PROVIDERS, +EMPLOYEES, AGENTS, OFFICERS OR DIRECTORS BE LIABLE FOR DAMAGES OF ANY KIND, +UNDER ANY LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH YOUR USE, OR +INABILITY TO USE, THE WEBSITE, THE SERVICE, ANY WEBSITES LINKED TO IT, ANY +CONTENT ON THE WEBSITE OR SUCH OTHER WEBSITES, INCLUDING ANY DIRECT, INDIRECT, +SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES. + +## 9. Governing Law and Jurisdiction + +These Terms of Service and any dispute or claim arising out of or related to +them, their subject matter or their formation (in each case, including +non-contractual disputes or claims) shall be governed by and construed in +accordance with the internal laws of France without giving effect to any choice +or conflict of law provision or rule. Any legal suit, action, or proceeding +arising out of, or related to, these Terms of Service or the Website shall be +instituted exclusively in the federal courts of France. + +--- + +By using OpenStatus , you acknowledge that you have read these Terms of Service, +understood them, and agree to be bound by them. If you do not agree to these +Terms of Service, you are not authorized to use the Service. We reserve the +right to change these Terms of Service at any time, so please review them +frequently. + +Thank you for using OpenStatus! diff --git a/apps/web/src/contentlayer/documents/legal.ts b/apps/web/src/contentlayer/documents/legal.ts new file mode 100644 index 000000000..d1580e663 --- /dev/null +++ b/apps/web/src/contentlayer/documents/legal.ts @@ -0,0 +1,23 @@ +import { defineDocumentType } from "contentlayer/source-files"; + +export const LegalPost = defineDocumentType(() => ({ + name: "LegalPost", + filePathPattern: `legal/*.mdx`, + contentType: "mdx", + fields: { + title: { + type: "string", + required: true, + }, + updatedAt: { + type: "string", + required: true, + }, + }, + computedFields: { + slug: { + type: "string", + resolve: (post) => post._raw.sourceFileName.replace(/\.mdx$/, ""), + }, + }, +})); diff --git a/apps/web/src/middleware.ts b/apps/web/src/middleware.ts index cd4274890..29d770dbf 100644 --- a/apps/web/src/middleware.ts +++ b/apps/web/src/middleware.ts @@ -55,6 +55,7 @@ export default authMiddleware({ "/api/checker/cron/10m", "/blog", "/blog/(.*)", + "/legal/(.*)", "/discord", "/github", ], -- 2.51.2