From b79b812c442c9d4cfdeca06ae6c106549954d12d Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 09:37:46 +0800
Subject: [PATCH 01/36] change handleReset order
---
components/core/code-area-actions/submit-button.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/core/code-area-actions/submit-button.tsx b/components/core/code-area-actions/submit-button.tsx
index ed0354c..b33e4f0 100644
--- a/components/core/code-area-actions/submit-button.tsx
+++ b/components/core/code-area-actions/submit-button.tsx
@@ -82,8 +82,8 @@ const SubmitButton = () => {
};
const handleContinueButtonClick = () => {
- setContinueClicked(true);
handleReset();
+ setContinueClicked(true);
router.push("/");
};
From efce8c0029dbfa82458d33897d88ab814962975b Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 09:37:58 +0800
Subject: [PATCH 02/36] include class as allowed attribute
---
app/api/code/submit/submit-helpers.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/api/code/submit/submit-helpers.ts b/app/api/code/submit/submit-helpers.ts
index 7a53569..f6baf33 100644
--- a/app/api/code/submit/submit-helpers.ts
+++ b/app/api/code/submit/submit-helpers.ts
@@ -7,12 +7,13 @@ const DOMPurify = createDOMPurify(window);
// Sanitizer function
export const validateHTML = (html: string): boolean => {
+ html = html.replace(/\n/g, " ").replace(/\s+/g, " ").trim();
if (!isHtml(html)) {
return false;
}
const cleanHTML = DOMPurify.sanitize(html, {
- ALLOWED_ATTR: ["href", "src", "alt", "title", "style"],
+ ALLOWED_ATTR: ["href", "src", "alt", "title", "style", "class"],
FORBID_TAGS: [
"script",
"iframe",
From 40e5d40d27e86512516bdbfb386fe44ae3d41d33 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 09:39:07 +0800
Subject: [PATCH 03/36] disallow image and anchor tags
---
app/api/code/submit/submit-helpers.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/api/code/submit/submit-helpers.ts b/app/api/code/submit/submit-helpers.ts
index f6baf33..a651727 100644
--- a/app/api/code/submit/submit-helpers.ts
+++ b/app/api/code/submit/submit-helpers.ts
@@ -13,7 +13,7 @@ export const validateHTML = (html: string): boolean => {
}
const cleanHTML = DOMPurify.sanitize(html, {
- ALLOWED_ATTR: ["href", "src", "alt", "title", "style", "class"],
+ ALLOWED_ATTR: ["style", "class"],
FORBID_TAGS: [
"script",
"iframe",
@@ -22,6 +22,8 @@ export const validateHTML = (html: string): boolean => {
"link",
"style",
"form",
+ "img",
+ "a",
],
FORBID_ATTR: [
"onerror",
From aca8f3005459abe8b6d2307622e1cbc623148615 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 09:57:00 +0800
Subject: [PATCH 04/36] implement localStorage for rating
---
.../components/submit-rating-component.tsx | 2 +
.../rating-area/rating-component-server.tsx | 57 ++++++++++++++++
.../core/rating-area/rating-component.tsx | 65 ++++---------------
3 files changed, 73 insertions(+), 51 deletions(-)
create mode 100644 components/core/rating-area/rating-component-server.tsx
diff --git a/components/core/rating-area/components/submit-rating-component.tsx b/components/core/rating-area/components/submit-rating-component.tsx
index 16f5250..d87f4a7 100644
--- a/components/core/rating-area/components/submit-rating-component.tsx
+++ b/components/core/rating-area/components/submit-rating-component.tsx
@@ -3,6 +3,7 @@
import { usePutRating } from "@/client-side-queries/rq-queries/rating-submit";
import { Button } from "@/components/ui/button";
import { useRatingStore } from "@/data-store/rating-store";
+import { saveToLocalStorage } from "@/lib/localStorage";
import { Check, Loader2 } from "lucide-react";
import { useEffect, useState } from "react";
import toast from "react-hot-toast";
@@ -28,6 +29,7 @@ const RatingSubmitButton = () => {
if (mutation.isSuccess) {
toast.success("We really appreciated your help!");
setSubmittingRating(false);
+ saveToLocalStorage("rating", "true");
}
}, [mutation.isSuccess]);
diff --git a/components/core/rating-area/rating-component-server.tsx b/components/core/rating-area/rating-component-server.tsx
new file mode 100644
index 0000000..dd2b369
--- /dev/null
+++ b/components/core/rating-area/rating-component-server.tsx
@@ -0,0 +1,57 @@
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "@/components/ui/card";
+import OverallRating from "./components/overall-rating";
+import Grid from "./util/arrange-rating-sections";
+import RatingSubmitButton from "./components/submit-rating-component";
+import UxRating from "./components/ux-rating";
+import FunRating from "./components/fun-rating";
+import { FeedbackModal } from "@/components/landing/feedback/feedback-modal";
+
+/*
+Ratings are stored as per the following schema:
+ :
+
+For example:
+- Overall_Rating : 500-100
+ - This states that we currently have a total score of 500 over 100 ratings. Which means, on average, we get 5 stars from every rating.
+- Ux_Rating : 100-30
+ - Implies we have about 3.3333333... stars per rate
+- Fun_Rating : 0-2345
+ - We got 0 stars on average
+*/
+const RatingBodyServer = () => {
+ return (
+
+
+
+ Rate Tailspin
+
+ 30 seconds of your time could translates to a lot of
+ feedback for the team!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default RatingBodyServer;
diff --git a/components/core/rating-area/rating-component.tsx b/components/core/rating-area/rating-component.tsx
index 9ef1a98..3996805 100644
--- a/components/core/rating-area/rating-component.tsx
+++ b/components/core/rating-area/rating-component.tsx
@@ -1,57 +1,20 @@
-import {
- Card,
- CardContent,
- CardDescription,
- CardFooter,
- CardHeader,
- CardTitle,
-} from "@/components/ui/card";
-import OverallRating from "./components/overall-rating";
-import Grid from "./util/arrange-rating-sections";
-import RatingSubmitButton from "./components/submit-rating-component";
-import UxRating from "./components/ux-rating";
-import FunRating from "./components/fun-rating";
-import { FeedbackModal } from "@/components/landing/feedback/feedback-modal";
+"use client";
-/*
-Ratings are stored as per the following schema:
- :
+import { loadFromLocalStorage } from "@/lib/localStorage";
+import RatingBodyServer from "./rating-component-server";
-For example:
-- Overall_Rating : 500-100
- - This states that we currently have a total score of 500 over 100 ratings. Which means, on average, we get 5 stars from every rating.
-- Ux_Rating : 100-30
- - Implies we have about 3.3333333... stars per rate
-- Fun_Rating : 0-2345
- - We got 0 stars on average
-*/
const RatingBody = () => {
- return (
-
-
-
- Rate Tailspin
-
- 30 seconds of your time could translates to a lot of
- feedback for the team!
-
-
-
-
-
-
-
-
-
-
-
);
}
diff --git a/components/landing/test-challenges/forms/Stepper-Form.tsx b/components/landing/test-challenges/forms/Stepper-Form.tsx
index 4e549f7..fbddabf 100644
--- a/components/landing/test-challenges/forms/Stepper-Form.tsx
+++ b/components/landing/test-challenges/forms/Stepper-Form.tsx
@@ -2,9 +2,9 @@
import { useStepperStore } from "@/data-store/stepper-store";
+import { useEffect } from "react";
import { StepOne } from "../stepper-pages/StepOne";
import { StepTwo } from "../stepper-pages/StepTwo";
-import { useEffect } from "react";
export function StepperForm() {
const { step, setChallenge, setCheck, setEmail, setProgress, setStep } =
diff --git a/components/landing/test-challenges/stepper-pages/StepOne.tsx b/components/landing/test-challenges/stepper-pages/StepOne.tsx
index 73b73ba..f44deea 100644
--- a/components/landing/test-challenges/stepper-pages/StepOne.tsx
+++ b/components/landing/test-challenges/stepper-pages/StepOne.tsx
@@ -7,9 +7,9 @@ import {
useStepperStore,
progressIncrements,
} from "@/data-store/stepper-store";
-import { EmailFormField } from "../forms/Email-FormField";
-import { TOSFormField } from "../forms/TOS-FormField";
import { Loader2 } from "lucide-react";
+import { TOSFormField } from "../forms/TOS-FormField";
+import { EmailFormField } from "../forms/Email-FormField";
export function StepOne() {
const {
diff --git a/components/landing/test-challenges/stepper-pages/StepTwo.tsx b/components/landing/test-challenges/stepper-pages/StepTwo.tsx
index a9b21f9..ec9a691 100644
--- a/components/landing/test-challenges/stepper-pages/StepTwo.tsx
+++ b/components/landing/test-challenges/stepper-pages/StepTwo.tsx
@@ -10,10 +10,10 @@ import {
import useSessionStore from "@/data-store/session-store";
import LandingPageCode from "@/components/landing/test-challenges/placeholder-code";
import { useRouter } from "next/navigation";
-import { ChallengeFormField } from "../forms/Challenge-FormField";
import { Loader2 } from "lucide-react";
import { challengeEnum } from "@/data-store/challenge-store";
import { saveToLocalStorage } from "@/lib/localStorage";
+import { ChallengeFormField } from "../forms/Challenge-FormField";
const formStepTwoSchema = z.object({
challenge: z.nativeEnum(challengeEnum, {
From b7d5fdc55d895d62daf316ae81c94c8da9eb8c43 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 10:30:07 +0800
Subject: [PATCH 11/36] change instructional text
---
app/page.tsx | 5 +++--
.../landing/test-challenges/stepper-pages/StepperCard.tsx | 8 +++-----
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/app/page.tsx b/app/page.tsx
index d6391f0..cce0b1f 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -41,8 +41,9 @@ export default function Home() {
We hate to be non-inclusive towards phones and
- tablets, however we want to provide you with the
- best experience possible!
+ tablets, however coding on small screens is
+ currently unsupported! Try us on your
+ laptop/desktop!
diff --git a/components/landing/test-challenges/stepper-pages/StepperCard.tsx b/components/landing/test-challenges/stepper-pages/StepperCard.tsx
index 1db2632..66b7f8d 100644
--- a/components/landing/test-challenges/stepper-pages/StepperCard.tsx
+++ b/components/landing/test-challenges/stepper-pages/StepperCard.tsx
@@ -14,13 +14,11 @@ export function StepperCard() {
- Try One Of Our Coding Challenges!!!
+ Try Out A Coding Challenge!
- {" "}
- Here at TailSpin, we like to have fun! By filling out
- this form, you can use our code editor and attempt to do an
- awesome Tailwind UI challenge!
+ It's simple. Give us an email, accept the TOS, and
+ select a challenge.
From 74ac0beb7bf545a53cc6c1d3d0b9380cc03946c8 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 10:32:03 +0800
Subject: [PATCH 12/36] refactor to challenge folder
---
app/page.tsx | 2 +-
.../forms/Challenge-FormField.tsx | 0
.../{test-challenges => challenge}/forms/Email-FormField.tsx | 0
.../{test-challenges => challenge}/forms/Stepper-Form.tsx | 0
.../{test-challenges => challenge}/forms/TOS-FormField.tsx | 0
.../{test-challenges => challenge}/stepper-pages/StepOne.tsx | 0
.../{test-challenges => challenge}/stepper-pages/StepTwo.tsx | 0
.../stepper-pages/StepperCard.tsx | 0
8 files changed, 1 insertion(+), 1 deletion(-)
rename components/landing/{test-challenges => challenge}/forms/Challenge-FormField.tsx (100%)
rename components/landing/{test-challenges => challenge}/forms/Email-FormField.tsx (100%)
rename components/landing/{test-challenges => challenge}/forms/Stepper-Form.tsx (100%)
rename components/landing/{test-challenges => challenge}/forms/TOS-FormField.tsx (100%)
rename components/landing/{test-challenges => challenge}/stepper-pages/StepOne.tsx (100%)
rename components/landing/{test-challenges => challenge}/stepper-pages/StepTwo.tsx (100%)
rename components/landing/{test-challenges => challenge}/stepper-pages/StepperCard.tsx (100%)
diff --git a/app/page.tsx b/app/page.tsx
index cce0b1f..a26ba92 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -11,7 +11,7 @@ import GrowOnScroll from "@/components/ui/grow-on-scroll";
import Footer from "@/components/landing/footer";
import ComponentCarousel from "@/components/ui/component-carousel";
import { Separator } from "@/components/ui/separator";
-import StepperCard from "@/components/landing/test-challenges/stepper-pages/StepperCard";
+import StepperCard from "@/components/landing/challenge/stepper-pages/StepperCard";
export default function Home() {
return (
diff --git a/components/landing/test-challenges/forms/Challenge-FormField.tsx b/components/landing/challenge/forms/Challenge-FormField.tsx
similarity index 100%
rename from components/landing/test-challenges/forms/Challenge-FormField.tsx
rename to components/landing/challenge/forms/Challenge-FormField.tsx
diff --git a/components/landing/test-challenges/forms/Email-FormField.tsx b/components/landing/challenge/forms/Email-FormField.tsx
similarity index 100%
rename from components/landing/test-challenges/forms/Email-FormField.tsx
rename to components/landing/challenge/forms/Email-FormField.tsx
diff --git a/components/landing/test-challenges/forms/Stepper-Form.tsx b/components/landing/challenge/forms/Stepper-Form.tsx
similarity index 100%
rename from components/landing/test-challenges/forms/Stepper-Form.tsx
rename to components/landing/challenge/forms/Stepper-Form.tsx
diff --git a/components/landing/test-challenges/forms/TOS-FormField.tsx b/components/landing/challenge/forms/TOS-FormField.tsx
similarity index 100%
rename from components/landing/test-challenges/forms/TOS-FormField.tsx
rename to components/landing/challenge/forms/TOS-FormField.tsx
diff --git a/components/landing/test-challenges/stepper-pages/StepOne.tsx b/components/landing/challenge/stepper-pages/StepOne.tsx
similarity index 100%
rename from components/landing/test-challenges/stepper-pages/StepOne.tsx
rename to components/landing/challenge/stepper-pages/StepOne.tsx
diff --git a/components/landing/test-challenges/stepper-pages/StepTwo.tsx b/components/landing/challenge/stepper-pages/StepTwo.tsx
similarity index 100%
rename from components/landing/test-challenges/stepper-pages/StepTwo.tsx
rename to components/landing/challenge/stepper-pages/StepTwo.tsx
diff --git a/components/landing/test-challenges/stepper-pages/StepperCard.tsx b/components/landing/challenge/stepper-pages/StepperCard.tsx
similarity index 100%
rename from components/landing/test-challenges/stepper-pages/StepperCard.tsx
rename to components/landing/challenge/stepper-pages/StepperCard.tsx
From 3eaee4ff66debe7919a9882fed08899dbae8a9e4 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 10:45:48 +0800
Subject: [PATCH 13/36] add badge
---
.../challenge/stepper-pages/StepperCard.tsx | 6 +++-
components/ui/badge.tsx | 36 +++++++++++++++++++
2 files changed, 41 insertions(+), 1 deletion(-)
create mode 100644 components/ui/badge.tsx
diff --git a/components/landing/challenge/stepper-pages/StepperCard.tsx b/components/landing/challenge/stepper-pages/StepperCard.tsx
index 66b7f8d..17d00eb 100644
--- a/components/landing/challenge/stepper-pages/StepperCard.tsx
+++ b/components/landing/challenge/stepper-pages/StepperCard.tsx
@@ -8,13 +8,17 @@ import {
import { Progress } from "@/components/ui/progress";
import { StepperForm } from "../forms/Stepper-Form";
+import { Badge } from "@/components/ui/badge";
export function StepperCard() {
return (
- Try Out A Coding Challenge!
+
+ It's simple. We'll provide you a coding
+ environment and a target image. Your job is to recreate that
+ image using{" "}
+ HTML{" "}
+ and{" "}
+
+ TailwindCSS
+
+ . After you submit, we'll send your scores via Email
+ 📧.
+
+
+
+
+ At this stage, we're presenting a bare bones look at
+ what's to come for Tailspin and looking for{" "}
+
+ feedback
+
+ !
+
+
+
+
+ {button()}
+
+
+ );
+};
+
+export default ChallengeIntro;
diff --git a/components/landing/challenge/challenge-main.tsx b/components/landing/challenge/challenge-main.tsx
new file mode 100644
index 0000000..c089107
--- /dev/null
+++ b/components/landing/challenge/challenge-main.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import { useState } from "react";
+import ChallengeIntro from "./challenge-intro";
+import StepperCard from "./stepper-pages/StepperCard";
+import { Button } from "@/components/ui/button";
+import { Code } from "lucide-react";
+
+const ChallengeMain = () => {
+ const [goToStepper, setGoToStepper] = useState(false);
+
+ const readyToCodeButton = () => {
+ return (
+
+ );
+ };
+ return (
+ <>
+ {!goToStepper && }
+ {goToStepper && }
+ >
+ );
+};
+
+export default ChallengeMain;
From 3b2870f187f3fbd3347125a89af07018d726de73 Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 12:32:00 +0800
Subject: [PATCH 17/36] add info on user accounts
---
components/landing/challenge/challenge-intro.tsx | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/components/landing/challenge/challenge-intro.tsx b/components/landing/challenge/challenge-intro.tsx
index 1e10f1d..08ecb32 100644
--- a/components/landing/challenge/challenge-intro.tsx
+++ b/components/landing/challenge/challenge-intro.tsx
@@ -39,7 +39,13 @@ const ChallengeIntro: React.FC = ({ button }) => {
TailwindCSS
. After you submit, we'll send your scores via Email
- 📧.
+ 📧.
+ Currently, we only provide a playground which
+ represents the core services of Tailspin. When you submit
+ code from our platform, we score your code and email the
+ result of similarity to you. We don't have a way for
+ you to track all your previous submissions or rank yourself
+ against other developers trying out Tailspin.
From 03a9cd058956ded35b66ba2ccb23be077f787cee Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 12:32:08 +0800
Subject: [PATCH 18/36] make accordion text smaller
---
components/ui/accordion.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/ui/accordion.tsx b/components/ui/accordion.tsx
index be5e311..f42a988 100644
--- a/components/ui/accordion.tsx
+++ b/components/ui/accordion.tsx
@@ -28,7 +28,7 @@ const AccordionTrigger = React.forwardRef<
svg]:rotate-180",
+ "text-md flex flex-1 items-center justify-between py-4 font-medium text-muted-foreground transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
className
)}
{...props}
From 9ac9940db29f03490174b7feb93c51dbc05525da Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 12:32:18 +0800
Subject: [PATCH 19/36] add 2 faqs
---
components/landing/faq.tsx | 41 ++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/components/landing/faq.tsx b/components/landing/faq.tsx
index 7a8b6bc..5d86841 100644
--- a/components/landing/faq.tsx
+++ b/components/landing/faq.tsx
@@ -194,6 +194,47 @@ const FAQ = () => {
+
+
+ When are we implementing accounts?
+
+
+ In this Alpha stage, our plan is to gather feedback from
+ users before we roll out stateful user accounts. We're
+ doing this to test the waters and viability of the
+ concept of Tailspin because developing good quality
+ software takes time and effort. That said, if you
+ haven't given us feedback, you may do so{" "}
+
+ here
+
+ !
+
+
+
+
+ Why do I have to provide my email in the playground?
+
+
+ To make it harder for bad people to spam us and to
+ provide you with a better experience. Tailspin's
+ tech stack includes a managed database, GPT3.5, and
+ serverless compute. We don't want our resources being
+ abused so we insist on an email so that it becomes an
+ extra layer of effort for bad actors to misuse Tailspin.
+ As mentioned, Tailspin uses GPT3.5 and serverless
+ compute. These technologies can take a long time,
+ depending on the total load on these services from other
+ applications. As such, in order to facilitate an
+ asynchronous processing experience, we are essentially
+ running these longer tasks in the background; so we have
+ to send you the results of processing in an asynchronous
+ fashion too - email!
+
+
);
From 3cf56b6646619f8df4435bf4c5396017022f916b Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 12:44:35 +0800
Subject: [PATCH 20/36] implement contact form
---
components/landing/footer.tsx | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/components/landing/footer.tsx b/components/landing/footer.tsx
index d7599af..305754f 100644
--- a/components/landing/footer.tsx
+++ b/components/landing/footer.tsx
@@ -1,5 +1,7 @@
import Link from "next/link";
import { TailspinLogo } from "../ui/spinning-logo";
+import { Button } from "../ui/button";
+import { FeedbackModal } from "./feedback/feedback-modal";
const Footer = () => {
return (
@@ -17,17 +19,14 @@ const Footer = () => {
It's simple. We'll provide you a coding
- environment and a target image. Your job is to recreate that
- image using{" "}
+ environment and a target image 🖼️. Your job is to recreate
+ that image using{" "}
HTML{" "}
and{" "}
@@ -43,9 +46,12 @@ const ChallengeIntro: React.FC = ({ button }) => {
Currently, we only provide a playground which
represents the core services of Tailspin. When you submit
code from our platform, we score your code and email the
- result of similarity to you. We don't have a way for
- you to track all your previous submissions or rank yourself
- against other developers trying out Tailspin.
+ result of similarity to you.{" "}
+
+ In this MVP, we don't have a way for you to track
+ all your previous submissions or rank yourself against
+ other developers trying out Tailspin.
+
);
};
From 601008dc680c236e531dc0d97312994731ee5c1d Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 13:58:49 +0800
Subject: [PATCH 29/36] stats in a rows of 2 only in lg screen
---
components/landing/stats.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/landing/stats.tsx b/components/landing/stats.tsx
index eb6cbc6..26703a0 100644
--- a/components/landing/stats.tsx
+++ b/components/landing/stats.tsx
@@ -8,7 +8,7 @@ const SiteCounter = async () => {
Some Statistics
-
+
From 617ffccd80462516f86c29f128d46867982027ee Mon Sep 17 00:00:00 2001
From: Zac
Date: Wed, 6 Dec 2023 14:02:50 +0800
Subject: [PATCH 30/36] add logo to about title
---
components/landing/about-tailspin.tsx | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/components/landing/about-tailspin.tsx b/components/landing/about-tailspin.tsx
index 699e732..20e6cea 100644
--- a/components/landing/about-tailspin.tsx
+++ b/components/landing/about-tailspin.tsx
@@ -2,6 +2,7 @@ import Link from "next/link";
import { Button } from "@/components/ui/button";
import { BarChartBig } from "lucide-react";
import FlipOnScroll from "../ui/flip-on-scroll";
+import { TailspinLogo } from "../ui/spinning-logo";
type AboutTailSpinBoxesProps = {
title: string;
@@ -37,8 +38,8 @@ const AboutTailspin = () => {
className='relative flex h-full flex-col items-center justify-center rounded-lg bg-black p-6'
id='about-section'
>
-
- Tailspin
+
+ Tailspin
Date: Wed, 6 Dec 2023 14:04:05 +0800
Subject: [PATCH 31/36] linting
---
components/landing/faq.tsx | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/components/landing/faq.tsx b/components/landing/faq.tsx
index 5d86841..e43642b 100644
--- a/components/landing/faq.tsx
+++ b/components/landing/faq.tsx
@@ -200,11 +200,11 @@ const FAQ = () => {
In this Alpha stage, our plan is to gather feedback from
- users before we roll out stateful user accounts. We're
- doing this to test the waters and viability of the
- concept of Tailspin because developing good quality
- software takes time and effort. That said, if you
- haven't given us feedback, you may do so{" "}
+ users before we roll out stateful user accounts.
+ We're doing this to test the waters and viability
+ of the concept of Tailspin because developing good
+ quality software takes time and effort. That said, if
+ you haven't given us feedback, you may do so{" "}
{
To make it harder for bad people to spam us and to
provide you with a better experience. Tailspin's
tech stack includes a managed database, GPT3.5, and
- serverless compute. We don't want our resources being
- abused so we insist on an email so that it becomes an
- extra layer of effort for bad actors to misuse Tailspin.
- As mentioned, Tailspin uses GPT3.5 and serverless
- compute. These technologies can take a long time,
- depending on the total load on these services from other
- applications. As such, in order to facilitate an
+ serverless compute. We don't want our resources
+ being abused so we insist on an email so that it becomes
+ an extra layer of effort for bad actors to misuse
+ Tailspin. As mentioned, Tailspin uses GPT3.5 and
+ serverless compute. These technologies can take a long
+ time, depending on the total load on these services from
+ other applications. As such, in order to facilitate an
asynchronous processing experience, we are essentially
running these longer tasks in the background; so we have
to send you the results of processing in an asynchronous
From 7da531d3f378396bc6a9e35443328888cfc12a15 Mon Sep 17 00:00:00 2001
From: Zac
Date: Fri, 8 Dec 2023 07:42:42 +0800
Subject: [PATCH 32/36] put logo above text
---
components/landing/about-tailspin.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/components/landing/about-tailspin.tsx b/components/landing/about-tailspin.tsx
index 20e6cea..b48a6de 100644
--- a/components/landing/about-tailspin.tsx
+++ b/components/landing/about-tailspin.tsx
@@ -38,8 +38,9 @@ const AboutTailspin = () => {
className='relative flex h-full flex-col items-center justify-center rounded-lg bg-black p-6'
id='about-section'
>
+
- Building out this landing page. Polishing the
- interactive playground. Adding nice UI/UX.
-
-
V1.0
+
+ Current
+
- Innovate and make incremental improvements to the
- core business of Tailspin - the coding page.
- Iteratively add, optimize, and beautify features to
- the coding page.
+ Bare bones MVP. Users can try the coding challenges
+ and explore Tailspin. We'll work on the
+ feedback we receive from our users and improve our
+ MVP.
From fe22044e92d97280911635e3857638cc0b5c2400 Mon Sep 17 00:00:00 2001
From: Zac
Date: Fri, 8 Dec 2023 07:57:55 +0800
Subject: [PATCH 34/36] add motivation faq
---
components/landing/faq.tsx | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/components/landing/faq.tsx b/components/landing/faq.tsx
index e43642b..33af386 100644
--- a/components/landing/faq.tsx
+++ b/components/landing/faq.tsx
@@ -235,6 +235,19 @@ const FAQ = () => {
fashion too - email!
+
+
+ What was the motivation behind Tailspin?
+
+
+ Wise man once said: "There's no better way to learn
+ than to do." At the time of writing, there isn't a
+ mainstream online TailwindCSS centered platform, where
+ we can write Tailwind powered UI building code and
+ challenge ourselves and one another in the process.
+ Tailspin hopes to close that gap in the community.
+
+
From db2789a0d927f969461b76b12cd51ecd35acd12c Mon Sep 17 00:00:00 2001
From: Erick
Date: Sat, 9 Dec 2023 16:48:37 -0500
Subject: [PATCH 36/36] replace quote literals with encoded quotes
---
components/landing/faq.tsx | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/components/landing/faq.tsx b/components/landing/faq.tsx
index 33af386..9b91697 100644
--- a/components/landing/faq.tsx
+++ b/components/landing/faq.tsx
@@ -240,12 +240,13 @@ const FAQ = () => {
What was the motivation behind Tailspin?
- Wise man once said: "There's no better way to learn
- than to do." At the time of writing, there isn't a
- mainstream online TailwindCSS centered platform, where
- we can write Tailwind powered UI building code and
- challenge ourselves and one another in the process.
- Tailspin hopes to close that gap in the community.
+ Wise man once said: "There's no better way to
+ learn than to do." At the time of writing, there
+ isn't a mainstream online TailwindCSS centered
+ platform, where we can write Tailwind powered UI
+ building code and challenge ourselves and one another in
+ the process. Tailspin hopes to close that gap in the
+ community.