fix: clarify experimental features, add to faq, add preview label

This commit is contained in:
rzmk 2023-12-22 11:57:15 -05:00
parent c8c8fe1b5d
commit 1407dde13d
No known key found for this signature in database
9 changed files with 100 additions and 80 deletions

View file

@ -1,11 +1,11 @@
export const CheckArrowIcon = () => ( export const CheckArrowIcon = ({ fillColor }) => (
<div className="rounded-full bg-transparent w-5 h-5 flex justify-center items-center mr-4"> <div className="rounded-full bg-transparent w-5 h-5 flex justify-center items-center mr-4">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 512 512" viewBox="0 0 512 512"
width="20px" width="20px"
height="20px" height="20px"
className="fill-customSecondary" className={fillColor ? fillColor : "fill-customSecondary"}
> >
<path d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z" /> <path d="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z" />
</svg> </svg>

View file

@ -0,0 +1,23 @@
import React from "react";
const Download = () => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
width="18"
height="18"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
className="lucide lucide-download"
>
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
<polyline points="7 10 12 15 17 10" />
<line x1="12" x2="12" y1="15" y2="3" />
</svg>
);
};
export default Download;

View file

@ -9,9 +9,29 @@ const FAQData = [
question: "What is qsv pro?", question: "What is qsv pro?",
answer: "qsv pro is a desktop application that allows you to run qsv commands with a graphical user interface based on the qsv CLI tool. It also features a suite of recipes (scripts) for common data wrangling tasks to perform on your spreadsheet, including sorting rows, removing duplicate rows, and removing Personally Identifiable Information (PII).", answer: "qsv pro is a desktop application that allows you to run qsv commands with a graphical user interface based on the qsv CLI tool. It also features a suite of recipes (scripts) for common data wrangling tasks to perform on your spreadsheet, including sorting rows, removing duplicate rows, and removing Personally Identifiable Information (PII).",
}, },
{
question: 'What does "preview" mean?',
answer: "qsv pro is currently in preview, which means that it may contain bugs and does not include all of the features that are planned in a stable release. If you encounter any bugs or have any feature/feedback requests, you may contact us with our feedback form.",
links: [
{
label: "Feedback form",
url: "https://dathere.com/qsv-feedback-form/",
},
],
},
{
question: 'What does "experimental" mean?',
answer: "qsv pro may include experimental features that may not be fully functional/tested or may not be included in a stable release. If you encounter any bugs or have any feature/feedback requests, you may contact us with our feedback form.",
links: [
{
label: "Feedback form",
url: "https://dathere.com/qsv-feedback-form/",
},
],
},
{ {
question: "How do I get qsv pro?", question: "How do I get qsv pro?",
answer: "qsv pro is currently in preview. You may download the latest version of qsv pro with a 7-day free trial. During or after the trial, you may purchase a license to continue using qsv pro.", answer: "You may download the latest version of qsv pro with a 7-day free trial. During or after the trial, you may purchase a license to continue using qsv pro. You may choose between any of the installers for Windows (.msi, -setup.exe), macOS (.app, .dmg), and Linux (.AppImage, .deb).",
links: [ links: [
{ {
label: "Download qsv pro", label: "Download qsv pro",

View file

@ -40,8 +40,15 @@ export const Features0 = () => {
<li className="mb-4 flex"> <li className="mb-4 flex">
<CheckArrowIcon /> <CheckArrowIcon />
<span> <span>
File formats: .csv, .tsv, .tab, .xlsx, File formats: .csv, .xlsx,{" "}
.xls, .ods, .xlsm, .xlsb <span className="text-red-300">
.tsv, .tab, .xls, .ods, .xlsm, .xlsb
</span>
<br />
<span className="text-red-300">
*Experimental file formats, may not
work as expected.
</span>
</span> </span>
</li> </li>
<li className="mb-4 flex"> <li className="mb-4 flex">

View file

@ -47,7 +47,7 @@ export const Features2 = () => (
</li> </li>
<li className="mb-4 flex"> <li className="mb-4 flex">
<CheckArrowIcon /> <CheckArrowIcon />
<span>In-app data dictionary form</span> In-app data dictionary form
<span className="ml-2 text-red-300"> <span className="ml-2 text-red-300">
(experimental) (experimental)
</span> </span>

View file

@ -28,17 +28,27 @@ export const FeaturesDiagonal = () => {
> >
<div className=" 2xl:w-[1150px] xl:w-[1050px] md:w-4/5 flex justify-center bg-customDarkBg1 pt-12 lg:pt-24 pb-8 lg:pb-20 mx-auto lg:flex-row flex-col"> <div className=" 2xl:w-[1150px] xl:w-[1050px] md:w-4/5 flex justify-center bg-customDarkBg1 pt-12 lg:pt-24 pb-8 lg:pb-20 mx-auto lg:flex-row flex-col">
<div className="w-3/4 lg:w-1/2 flex flex-col lg:mx-unset mx-auto"> <div className="w-3/4 lg:w-1/2 flex flex-col lg:mx-unset mx-auto">
<span className="custom-block-subtitle"> <span
style={{ color: "rgb(252, 165, 165)" }}
className="custom-block-subtitle"
>
Experimental Feature Experimental Feature
</span> </span>
<h2 className="mt-10 mb-8 text-4xl lg:text-5xl custom-block-big-title"> <h2 className="mt-10 mb-8 text-4xl lg:text-5xl custom-block-big-title">
Run qsv commands with our qsv Configurator GUI Run qsv terminal commands with the{" "}
<u>Configurator GUI</u>
</h2> </h2>
<p className="mb-16 text-customGrayText leading-loose"> <p className="mb-16 text-customGrayText leading-loose">
No need to run qsv commands in your terminal. Try No need to run qsv commands in your terminal. Try
out our experimental qsv Configurator GUI to use qsv out our qsv Configurator graphical user interface
commands with a graphical user interface. (GUI)<span className="text-red-300">*</span> as an
interactive way to run qsv without the need to use a
command line interface (CLI).
</p> </p>
<span className="text-red-300">
*Configurator does not currently support all qsv
commands.
</span>
</div> </div>
<div className="w-4/5 lg:w-2/3 lg:pl-16 flex justify-center mx-auto pt-16 lg:pt-0"> <div className="w-4/5 lg:w-2/3 lg:pl-16 flex justify-center mx-auto pt-16 lg:pt-0">
<img <img

View file

@ -3,6 +3,7 @@ import { motion } from "framer-motion";
import dashboard from "../assets/images/dashboard.png"; import dashboard from "../assets/images/dashboard.png";
import qsvProLogo from "../assets/logos/qsv-pro-logo.png"; import qsvProLogo from "../assets/logos/qsv-pro-logo.png";
import Download from "../assets/icons/Download";
export const Hero = () => { export const Hero = () => {
return ( return (
@ -25,13 +26,16 @@ export const Hero = () => {
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5, delay: 0.05 }} transition={{ duration: 0.5, delay: 0.05 }}
> >
<div className="text-5xl sm:text-6xl lg:text-7xl xl:text-7xl font-bold tracking-wide text-white px-8 sm:px-8 md:px-20 lg:px-4"> <div className="flex justify-center items-center ml-20">
{/* <span>qsv pro</span> */} {/* <span>qsv pro</span> */}
<img <img
src={qsvProLogo} src={qsvProLogo}
alt="qsv pro logo" alt="qsv pro logo"
className="w-72 sm:w-96 lg:w-120" className="w-72 sm:w-96 lg:w-120"
/> />
<p className="text-white ml-1 font-['Inter'] text-xl mt-2 h-fit w-fit">
(preview)
</p>
</div> </div>
</motion.div> </motion.div>
<motion.div <motion.div
@ -65,15 +69,23 @@ export const Hero = () => {
animate={{ opacity: 1, y: 0 }} animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.5, delay: 0.15 }} transition={{ duration: 0.5, delay: 0.15 }}
> >
<div className="flex flex-col gap-2 sm:flex-row mt-14 mb-24 sm:mb-40 justify-center"> <div className="grid grid-cols-1 place-items-center gap-2 sm:flex-row mt-14 mb-24 sm:mb-40 justify-center">
<a <a
href="https://github.com/dathere/qsv-pro-releases/releases/latest" href="https://github.com/dathere/qsv-pro-releases/releases/latest"
target="_blank" target="_blank"
> >
<div className="custom-button-colored w-64 h-12 mr-0 sm:mr-4 lg:mr-6 mb-2 sm:mb-0"> <div className="custom-button-colored w-64 h-12 mb-2 sm:mb-0">
Start Your 7-Day Free Trial <Download />
<span className="ml-1 text-lg">
Download qsv pro
</span>
</div> </div>
</a> </a>
<p className="text-white text-sm sm:text-base text-center mx-auto">
Start your 7-day free trial,{" "}
<u>no payment required</u>.
</p>
{/* <div {/* <div
className="w-64 sm:w-52 h-12 rounded-xl font-bold text-white border border-solid flex justify-center items-center cursor-pointer bg-customDarkBg2 hover:bg-customDarkBg3 border-customPrimary transition" className="w-64 sm:w-52 h-12 rounded-xl font-bold text-white border border-solid flex justify-center items-center cursor-pointer bg-customDarkBg2 hover:bg-customDarkBg3 border-customPrimary transition"
> >

View file

@ -41,6 +41,9 @@ export const Navbar = () => {
alt="qsv pro logo" alt="qsv pro logo"
className="h-6" className="h-6"
/> />
<small className="text-white ml-1 font-['Inter'] text-xs mb-1 rounded-full px-1 border">
preview
</small>
</div> </div>
</a> </a>
</motion.div> </motion.div>
@ -50,7 +53,7 @@ export const Navbar = () => {
transition={{ duration: 0.3 }} transition={{ duration: 0.3 }}
exit={{ opacity: 0 }} exit={{ opacity: 0 }}
> >
<div className="hidden lg:flex h-full pl-12 pb-2"> <div className="hidden lg:flex h-full -ml-20 pb-2">
{navbarLinks.map(({ href, label, ariaLabel }) => ( {navbarLinks.map(({ href, label, ariaLabel }) => (
<a <a
className="navbar-link" className="navbar-link"
@ -63,70 +66,7 @@ export const Navbar = () => {
))} ))}
</div> </div>
</motion.div> </motion.div>
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.3 }}
exit={{ opacity: 0 }}
>
<div className="grow basis-0 justify-end hidden lg:flex">
<a
className="text-white custom-border-gray rounded-xl
bg-customDarkBg2 hover:bg-customDarkBg3 border-gray-700 pl-6 pr-8 pt-2 pb-2 text-sm flex"
href="https://github.com/dathere/qsv-pro-releases/releases/latest"
target="_blank"
aria-label="source code"
>
<span className="pt-px">Download</span>
</a>
</div>
</motion.div>
<div
className="lg:hidden flex flex-col px-2 py-3 border-solid border border-gray-600 rounded-md cursor-pointer hover:bg-customDarkBg2"
onClick={() => setIsOpen(!isOpen)}
>
<div className="w-5 h-0.5 bg-gray-500 mb-1"></div>
<div className="w-5 h-0.5 bg-gray-500 mb-1"></div>
<div className="w-5 h-0.5 bg-gray-500 "></div>
</div>
</div> </div>
{/* Mobile navbar */}
<AnimatePresence>
{isOpen && (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.3 }}
exit={{ opacity: 0 }}
>
<div
className="flex flex-col mt-16 lg:hidden absolute top-4 left-0 bg-customDarkBg1 z-50 w-full
items-center gap-10 pb-10 border-y border-solid border-customDarkBg3 pt-10
"
>
{navbarLinks.map(({ label, href, ariaLabel }) => (
<a
key={href}
className="navbar-link"
href={href}
onClick={() => setIsOpen(false)}
aria-label={ariaLabel}
>
{label}
</a>
))}
<a
className="text-white custom-border-gray rounded-xl
bg-customDarkBg2 hover:bg-customDarkBg3 border-gray-700 pl-6 pr-8 pt-2 pb-2 text-sm flex"
href="https://github.com/dathere/qsv-pro-releases/releases/latest"
target="_blank"
>
Download
</a>
</div>
</motion.div>
)}
</AnimatePresence>
</nav> </nav>
); );
}; };

View file

@ -8,7 +8,7 @@ const pricingData = [
"Transform data with recipes", "Transform data with recipes",
"Upload to CKAN datastores", "Upload to CKAN datastores",
"Interactive data table view", "Interactive data table view",
"Experimental Configurator GUI", "Configurator GUI (experimental)",
]; ];
export const Pricing = () => { export const Pricing = () => {
@ -131,7 +131,15 @@ export const Pricing = () => {
className="mb-4 flex" className="mb-4 flex"
key={`${text}-${index}`} key={`${text}-${index}`}
> >
<CheckArrowIcon /> <CheckArrowIcon
fillColor={
text.includes(
"(experimental)"
)
? "fill-red-300"
: ""
}
/>
<span>{text}</span> <span>{text}</span>
</li> </li>
))} ))}