diff --git a/package-lock.json b/package-lock.json index 4227343..cb653de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "react-hotkeys-hook": "^4.4.1", "react-i18next": "^14.1.1", "react-router-dom": "^6.21.0", + "react-tweet": "^3.2.1", "url": "^0.11.1", "usehooks-ts": "^3.1.0" }, @@ -1679,6 +1680,14 @@ "win32" ] }, + "node_modules/@swc/helpers": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", + "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2410,6 +2419,11 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", @@ -5103,6 +5117,28 @@ "react-dom": ">=16.8" } }, + "node_modules/react-tweet": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-tweet/-/react-tweet-3.2.1.tgz", + "integrity": "sha512-dktP3RMuwRB4pnSDocKpSsW5Hq1IXRW6fONkHhxT5EBIXsKZzdQuI70qtub1XN2dtZdkJWWxfBm/Q+kN+vRYFA==", + "dependencies": { + "@swc/helpers": "^0.5.3", + "clsx": "^2.0.0", + "swr": "^2.2.4" + }, + "peerDependencies": { + "react": ">= 18.0.0", + "react-dom": ">= 18.0.0" + } + }, + "node_modules/react-tweet/node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, "node_modules/react-window": { "version": "1.8.10", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.10.tgz", @@ -5610,6 +5646,18 @@ "node": ">=12.0.0" } }, + "node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/tailwindcss": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", @@ -5889,6 +5937,14 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/usehooks-ts": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", diff --git a/package.json b/package.json index 99810fe..4e1bf2e 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "react-hotkeys-hook": "^4.4.1", "react-i18next": "^14.1.1", "react-router-dom": "^6.21.0", + "react-tweet": "^3.2.1", "url": "^0.11.1", "usehooks-ts": "^3.1.0" }, diff --git a/src/assets/screenshot.png b/src/assets/screenshot.png new file mode 100644 index 0000000..3d14c86 Binary files /dev/null and b/src/assets/screenshot.png differ diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx index b84b8ec..6aae11f 100644 --- a/src/components/Navbar.jsx +++ b/src/components/Navbar.jsx @@ -9,14 +9,14 @@ export default function Navbar() { return ( <> -
-
+
+
- logo + logo -
+
document .getElementById("features") @@ -27,46 +27,46 @@ export default function Navbar() { Editor Templates
-
-
- - - - - - - - - +
- Try it for yourself + Try it for yourself
+ + {/* Learn more */}
-
- -
- Entity-Relationship diagrams simplified +
+
+
+
+ {shortenNumber(stats.stars)} +
+
+ GitHub stars +
-
- - - - - +
+
+ {shortenNumber(stats.forks)} +
+
+ GitHub forks +
- -
-
- Why drawDB? +
+
+ {shortenNumber(languages.length)} +
+
+ Languages +
-
- -
- - - -
- Free -
-
- drawDB is completely free of charge. -
-
-
- -
- - - -
- No registration -
-
- No need to sign up or login. Just jump into development. -
-
-
- -
- - - -
- Simple to use -
-
- Intuitive design that's easy to navigate. -
-
-
+
+
+ Join our community, become one of us. Help us become bigger and + better, support us by donating. +
+ + Support us{" "} + +
+
+
+ Build diagrams with a few clicks, see the full picture, export SQL + scripts, customize your editor, and more. +
+ +
+
+ Design for your database +
+
+ {dbs.map((s, i) => ( + + ))} +
+ + +
-
+ + {/* Features */} +
-
- Here is what drawDB offers +
+ More than just an editor
-
- More coming soon... +
+ What drawDB has to offer
{features.map((f, i) => (
-
+
{f.title}
{f.content} @@ -174,68 +213,48 @@ export default function LandingPage() {
-
-
- We support these DBMS + + {/* Tweets */} +
+
+ What the internet says about us
-
- - - - - +
+ + + +
-
+
+ + {/* Contact us */} + + + +
+
Reach out to us
- Your feedback is important to us. Share your thoughts and help us - improve. + We love hearing from you. Join our community on Discord, GitHub, and + X.
-
- -
Take a survey
- - - -
Report a bug
- - -
- +
+
+ If you're finding drawDB useful and would like to help us in + improving and adding new features, consider making a donation. +
+
Your support means a lot to us!
+ + Support us{" "} + +
+
Attention! The diagrams are saved in your browser. Before clearing the browser make sure to back up your data. @@ -275,6 +320,14 @@ export default function LandingPage() { ); } +const dbs = [ + { icon: mysql_icon, height: 80 }, + { icon: postgres_icon, height: 48 }, + { icon: sqlite_icon, height: 64 }, + { icon: mariadb_icon, height: 64 }, + { icon: sql_server_icon, height: 64 }, +]; + const features = [ { title: "Export", @@ -373,7 +426,7 @@ const features = [ content: (
Add custom types for object-relational databases, or create custom JSON - schemes and alias types. + schemes.
), footer: "",