From ce36b5b800a81347ebd0bd25179b714bf31c3362 Mon Sep 17 00:00:00 2001 From: sinu <65924192+sinui0@users.noreply.github.com> Date: Mon, 26 Sep 2022 22:47:13 -0700 Subject: [PATCH] initial work on tlsn page --- package.json | 2 +- public/android-chrome-192x192.png | Bin 9829 -> 1866 bytes public/android-chrome-512x512.png | Bin 4988 -> 4585 bytes public/apple-touch-icon.png | Bin 9166 -> 1705 bytes public/favicon-16x16.png | Bin 659 -> 462 bytes public/favicon-32x32.png | Bin 1167 -> 618 bytes public/favicon.ico | Bin 7406 -> 618 bytes public/index.html | 6 +- public/mstile-150x150.png | Bin 7219 -> 1578 bytes src/HomePage.tsx | 11 +- src/components/About.css | 10 ++ src/components/About.tsx | 22 +++ src/components/Discord.tsx | 4 +- src/components/Footer.css | 4 + src/components/Footer.tsx | 21 +-- src/components/Hero.css | 4 + src/components/Hero.tsx | 53 +++--- src/components/How.css | 21 +++ src/components/How.tsx | 34 ++++ src/components/Navbar.css | 10 +- src/components/Navbar.tsx | 37 ++--- src/components/ProjectCard.css | 105 ------------ src/components/ProjectCard.tsx | 189 ---------------------- src/components/ProjectDescription.css | 80 --------- src/components/ProjectDescription.tsx | 42 ----- src/components/Projects.css | 26 --- src/components/Projects.tsx | 33 ---- src/components/Roadmap.css | 64 ++++++++ src/components/Roadmap.tsx | 36 +++++ src/components/Team.css | 17 -- src/components/Team.tsx | 31 ---- src/components/TeamMemberCard.css | 59 ------- src/components/TeamMemberCard.tsx | 61 ------- src/components/Usecases.css | 84 ++++++++++ src/components/Usecases.tsx | 60 +++++++ src/config.json | 8 + src/data/Example.md | 57 ------- src/data/Projects.json | 225 -------------------------- src/data/Team.json | 166 ------------------- src/images/eth-logo-blue.svg | 69 ++++++++ src/images/overview-pretty.png | Bin 0 -> 35422 bytes src/images/tlsn-logo.svg | 6 + src/index.css | 32 +++- src/index.tsx | 1 + 44 files changed, 506 insertions(+), 1184 deletions(-) create mode 100644 src/components/About.css create mode 100644 src/components/About.tsx create mode 100644 src/components/How.css create mode 100644 src/components/How.tsx delete mode 100644 src/components/ProjectCard.css delete mode 100644 src/components/ProjectCard.tsx delete mode 100644 src/components/ProjectDescription.css delete mode 100644 src/components/ProjectDescription.tsx delete mode 100644 src/components/Projects.css delete mode 100644 src/components/Projects.tsx create mode 100644 src/components/Roadmap.css create mode 100644 src/components/Roadmap.tsx delete mode 100644 src/components/Team.css delete mode 100644 src/components/Team.tsx delete mode 100644 src/components/TeamMemberCard.css delete mode 100644 src/components/TeamMemberCard.tsx create mode 100644 src/components/Usecases.css create mode 100644 src/components/Usecases.tsx create mode 100644 src/config.json delete mode 100644 src/data/Example.md delete mode 100644 src/data/Projects.json delete mode 100644 src/data/Team.json create mode 100644 src/images/eth-logo-blue.svg create mode 100644 src/images/overview-pretty.png create mode 100644 src/images/tlsn-logo.svg diff --git a/package.json b/package.json index f64ead3..181b19b 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "pse-landingpage", + "name": "tlsn-landingpage", "version": "0.1.0", "private": true, "dependencies": { diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png index b480f8d0fe3d617e565654f78ef4ca166983e791..2fb8e09b1b81c061f1932ef12e5086b7cd240546 100644 GIT binary patch literal 1866 zcmb`IdpOg39LIl%x#d!Fzm_;!haAUrwv;W4ZRtdwVlER!%gWu{GKt)tkeZas#HNcy zluI#^GBuYWMmBPiO)e)kcj~P3=XvT6&vTyV_4&S^=kv$+`CQ)5_nUV7n8Q|iZFv9y zwxS&EUBvq0d&tU&PZur$Bo?_~NB1xQQ0IORiKZ$@zc{HCj&ut@5#%3EJRN!#AQFk@ z_=|yIey4-ang@jj24KahB(noODU8dLCLhgtI& z&2R$=`c6j!XW8a**T8^1Dd(>syRXa|CDiQBQ7Wf3yFOg__!s|5lRaQl=ains@LO&N zrR#4Q+LZtyBkD^9TG_Ue3D!TMCbUP2umi7Xphq8Aq(|7ceVONux4WY(nN@5f$#W-C z=PpN7rrbx@Ec%3%%<&ri5&U}Tw=V38! zZgn?o3%kO&t25KOtiqOS<2mY_x&AVs{G+<;fGn^Xd~RHfj<6&@brtCf6eS3~$qJ?5 zJ(G+alZ+zidL#B`DL3tHI`yEjIkpeqqReGUri+3$`2X7h`x4{tl3HlFx8>B&0yW-gSumjk0wQV^z5Sha!zh6d1|H7 z@*l}r@)~wDH>rqLv7CD8#GkF=hxwXnYEPq*LVBHjauz>gM16@$wV8)bFBa0s8bavN z=Q}4gF3@4d_&;qxW;UkUOOe8aDMp~+$(n~z$ES#q++33^2xWEb?+pD?jQa3Olh{H0 z-Fnj#hFr-OZHX8E7uaV4iO0|LsFX@Y&bQl~XbdZZ=^gJc3iakM$V&>G;Sa%W+%61S z3U}*_22f}B_z18$+Du>m_O5`iZr3~6*cHnUo+-Ed%!)4LWXT%Fu3XAg)!V$ae(u9% zR?#8kWHV-YwsoGu51y#hOokuNVl%8gJ7`p8OHV12A`{`k#fXrg8 z9#xOsEl+CqrR?2}$M4O>-j2HzJsi6-kYO^s15ut!k5qVH^F&!L@$Xn%_RAF5kSW^Kzesx}`efK$qG$n@VC=Q^ zjhtB%yG6aS?ea`k07NAQJqp@)=wP*)@BH8dG1Y+|A2HuKZGy0vTmy{p{-NV?NLxnQ zt*;BU8L(q#530mmMFKe`IbX7=^;H_LEu5SR8+&QD*;1a8$HU^r-IIgMHcq_?d$Roy zbeNIGRv<`bQ>#VysWeD#ZEs%O-C<#I)TNC;whjaGZC$5fX_SHK1#vty4)3?Nu?&UY zt2%C2P6SYUyil2#RVEapj_vI!XoI&*OXkI|iV(76gLf1VQE~BcXBc*DhiUQcw;37t zj5qLPjD;6=aB-%Q4-eTZ#TJ|cJBeQFP%@1UtS>#daVuR@?zLd5Sw6&ye13*b&0;Kk z8Je*FxbgnOw;eu#!Z=VA#;i;k{oD|L1RqLSo~RQV5XVnw=FML75&we#3VF=F0^yVR E50pqjO8@`> literal 9829 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 DVhl*f diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png index 4a36a56636be874c98a6c88b6f25d7c336ba25bb..801d3c77c2af05a6fddd88a7ecff1d0690c729a8 100644 GIT binary patch literal 4585 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 literal 4988 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 diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index 4bf4fa147796fb4bb51d0a861556116ebfd17df0..b66eed174fd973cd2ff36a4072f272445853480b 100644 GIT binary patch delta 447 zcmV;w0YLtf1MzCV_|S*E^l&Yo9;Xs00047Nkl^6vuz(J~PNx z*-~b9vcbZXd17rR6C016ouw7uz!xB8k_BaJM|oNJ04O!nWPf8JQB0IEbB@Jh#`Me^ zId$uvm;dkl?-e4E@R#PmW;EWtQaIjviT0!68Y*U8z@mJXGM&WD0pB6$A-#Gv)AyXLrCFfQxIicUx9A5Vn8T z+qwfwg@@B-7Jm)0U@7Ok`MTP2^&ZQg?Op;5`HRmWgHeDJ?sKQ%Od=hOg#>qvXb5Qa zIkjzO6G=Z_N~r5cUB4J7t;X6q$Y1O{0wnyP^k;x` z<|X}L6Tn~?cxwv~~$wGz!wX;cy=kloVox2002ovPDHLkV1h&F!zKU# literal 659 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>`#i0GYhU~7slA&o9R0I*^V77Xs*a{5 zVZmt^kNvGGo$TTiFr{~MXY*25r@)TJ#fh=SolQ%o_HAjdo$KQjm6}))7Mva)oSvFk zd0^Yi*vS0cjHdLYs`TXQyv*j)^mS!_#wso#EAU+^HxVe*>gnPbB5^si z|E5@zfq?UED>0WB8$=u(3K(N<{QLjDCLlw--~6N{XR>|axsDw-0uLqnHJGW(nODwS+M{Fqv&l(;@!3D|s0-|eSW1jrfeunFag8WRNi0dVN-jzT zQVd20Mn<{@rn*MPA%ejJGDp}?H+U@Y(qnifE?Dx($#g2v3IMzCV_|S*E^l&Yo9;Xs0005^Nklu5{_I2A2|5F@ArM4`@nmg2q7=+Kf_q9Ne{~lvtPq_!paFVB(p=n zZP%yoeQ`RG6KK z3c&ToGtWERFMk&c`3HYCkDk4eNDNn>>}8ViW@Rxy?WHpJ5Xp8khJKU^xvUGi)&XE1 z*ahGo{C)ri_w)s_Az&Km5^%09By0lN*grxS>}E?xI)gFUO^D!@VYQvwS=lus<-pd= zxYGhqEaV?GH@uWTiMj*Wk{*{Aa-IJTvN@+7ysgV=0e^^n1^)ruNJ7lkym9|`Z7^3V zEB#IlfE0jr=ES4z)+>ez|hdb!0-zw z)bN6Vq11qZ;Z*_ygVhWM2JwP9y8>+(7#Pkw@b(VP3_w(Eh8%}BR92g%Ykh#oE-e*Nwe%)##|3FT4Y*{2VF zH#D$VwdmaC6aSOr%M1-Hr}b|=xc#N0y-#6I$HilRog91*Zhuu#Ji*S!iF1NIBHa4=hv~cQaUC~@K*VM#z!}6=Kk$H+r zs@7Jn7G{onHa*$1>9K{mqoSf}TvYy?se3gvba!ujeChcA-J2d)l}ysm(36pon>%%% zt8<{Pj&XTm->wZ0cW->8t7Ecf^OJeg_M4m9mlgJ=#Fv|!Ik-3l%$ruf@6z#qQ+hY4 ztLsKbHit-W!vrMc7bJs%@NGlYbNG&S_5_it-!Sfr_`zkS_3D@zv-x6qjrcNiI3 zMn~j&x`)k~vS-DD(=idbD;J!pES|V!_00=Me@BPs9N+uN-zP3Lv0~erJ60CXC3#)R z@ujmS?Gh6gKep#XR9N=^|Npn})z^Q=#+VvABSM$f4ZM4IL|H%-GRlpjYXsnJF0=DQQ{hDZ?cqGPQn6XvmbQAy*4_ zObCy44)*pAc8+FWZ7o^)^$V{97ta^o-VHm0Z`^1(f91@bJBKEnKf={*&ATQy=k1ZV zvP)#Y&Y2S%!)qY2V&~543aRRqD=MUaSN!;;nOt#kzWM=+3kn|I+9wn&R7`Ya?yhE& z5}X)#QGnG@XrrLii!y^_N26U->Q#=Zs2+7uT|Q&!v4y{tb#0Z6wXId%V{O${t+kDn zZF%pu+}ZPo>FS|HQ#cls6xPM*xp_!TnKEr<*6L}~SBHg!O`VodHQ8}fRP-`6W3x@$ z{M>d+WtVKcqHb7tay{8Ur01-c?#{Jqcj|hbwV2f77+vk2p6*^fn~|AM;b#5P zcMlfaYt`P{&`?;u-B2!*?by6~_vH3SHcy;6GvJz%fPP0)Y{sTH+c} zl9E`GYL#4+3Zxi}42+C)4NP^7j6)2~tc)zJ49&C+46FaIW?;Z-3KB|(Yh3I#>^X_+~x3MG{VsS23|CCLm76>}bc;^8O^)6h8OfBKB) z(;xZee9%@5v&}!U`@8CWlj)l{bedoW618#E~;cWR9?(Ztz&(rN{6}T(IPm Slj&5T6%3xPelF{r5}E)I+1Y&n diff --git a/public/favicon.ico b/public/favicon.ico index 949494081804a0b7cbc1c5ae33285aeb52459d60..e23f1a9d94c81dea1636b26d73a102c3a21cb8c3 100644 GIT binary patch literal 618 zcmV-w0+s!VP)EKhO1wHI#z7DZ2C;92`U^5z+{P;3m?=LXLp=4>*V@=u!s

`CZ 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 diff --git a/public/index.html b/public/index.html index d41658c..c75416d 100644 --- a/public/index.html +++ b/public/index.html @@ -13,11 +13,11 @@ - + - - Privacy and Scaling Exploration + + TLSNotary diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png index 8a83a7c722f1f36d54399146b221cf4d35ca64e5..9bd27d577d1a4c1386f94929a75e72d5e0db48f0 100644 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}oCO|{#S9FBcR-l2E>i9uP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_svco-U3d6?5L+4a}IDDs%kf z{m=6@uk?uY3KUei?Wrul`cf@D{JY?nQZq&0u?HSRUWloa1|F^I%AirTd#)l zt_dZ2;(}Wyc%@f9OIeW`roDXT?Q@??Hn*NDUN-yv|2^|Q*V&g>-~Vj)etz-3InN)x z$?*$KIr!;n_g?*X6H6>ys2v$sjI7ux zUt)Fyg|>>$nQig@@kDO+;bi}{~R3rljThK5F@x=flE7`XSl*>m&r`I&o_Up59v zC-$!9zBDU`qcz6+^|Chi>t{Tx7MQGFy5ZQ_Fpk%YCU)2ETsHOfv+Y~X`2fXN9R-R{ zE}p&VpnPUdX06f7#7oPj9hQ3hu28Y&fOUB4QUx8)puO_4^QL|g$ec87LqK8+t1ue6 zxrBYilwUq~H^vm(`PjT$;`HHS*P+I@>62!x4qK|G;uldIhc1{NFOCOx-qE zH(9%d^H38()EUwix@Prnw@dSuJYSKzl4o`O`)ik5*KIql@_o&cgG-*TbY01l9kVdo zy!1p!vce1^LII50YZeRbzvbBBA zm!z2Qr^I%Zl^of6W5=;&q5NKU?^5$!oW;)17geu~&bt>Ayf02~U-d@OLoA60$wMx$ z{y#lg8Z{yN-2C3!(BNeAPj`4Yq4WQR#aEBXkC5kMalx2Qb- zQplloWZ$|kdzRcRTp!KL;T@D%|J$#-6qpUBdSyoBv>G@@kckdX*Hn2L6?I*^MXh=1 zbE!3vqCnF*>LyN(p7%v&Ys*>zH4bh9$j7dwO!EKsJyy$$bIpF-e?0Gb)|~FT0FLcp zzxF+4d0usT?rw=xy%gse*NUZMEJEMSIsf8%#;o;`7k7Ua?%(-RXUddg)BZ$>fB99i zPFAn)jO>ehrV`(MGj>t_2@1>pB~oNBg#1GVPx18+C(d>MzP&!pmTz6i)I`y5Tfb_)c)Qx>%xU-FTV{gu zSMhjHYWsVF&9i<=y-UURf`s4YqS74GSKitH%B`n%_NMyHU;X*t)-Jx5(;>MLlT6ZA z{L}Tc_qUO2GW#lbvQ(XcpQV%^87C(2sLV052hyAPgyeDzZeY?B) z%h4a_^>&mluiEx!@)MsGjT=->x>k8!@?@u0I+5a0FoI1 zK4L1?3)ssvo$eDYdLQ^6J@uZLR7L@NYzP-f^cgDVOE7{(te$s793ZqECA z87_Ac?)+^Pn(>u;qy&XxIN0J`h@p>gsk?aL$)V~WzL?FupVn!g+`mKx&KlGlnO2Mw z5GWPv!P)Q?k~!p*;Cxaai9fzmQ-Gg;JAV

5!3S|EiOt_CdSsgJ|*o$DH4Uj%AK5 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 diff --git a/src/HomePage.tsx b/src/HomePage.tsx index d1ba58f..79a9885 100644 --- a/src/HomePage.tsx +++ b/src/HomePage.tsx @@ -3,7 +3,11 @@ import Hero from './components/Hero'; import Projects from './components/Projects'; import Discord from './components/Discord'; import Team from './components/Team'; +import Roadmap from './components/Roadmap'; +import Usecases from './components/Usecases'; +import About from './components/About'; import Footer from './components/Footer'; +import How from './components/How'; function HomePage() { return ( @@ -11,9 +15,10 @@ function HomePage() {

- - - + + + +
diff --git a/src/components/About.css b/src/components/About.css new file mode 100644 index 0000000..edd9cd8 --- /dev/null +++ b/src/components/About.css @@ -0,0 +1,10 @@ +#About { + display: flex; + padding: 100px; + justify-content: center; +} + +#About .container { + text-align: center; + max-width: 600px; +} diff --git a/src/components/About.tsx b/src/components/About.tsx new file mode 100644 index 0000000..ae817dc --- /dev/null +++ b/src/components/About.tsx @@ -0,0 +1,22 @@ +import "./About.css"; +import ethlogo from '../images/eth-logo-blue.svg'; +import config from "../config.json"; + +export default function About() { + return ( +
+
+ +
+

+ TLSNotary is a public good & open source project supported by the Ethereum Foundation under the + Privacy and Scaling Exploration Team. +

+ +
+ ); +} diff --git a/src/components/Discord.tsx b/src/components/Discord.tsx index 1dad5e8..f877d4a 100644 --- a/src/components/Discord.tsx +++ b/src/components/Discord.tsx @@ -6,8 +6,8 @@ function Discord() { return (
-
Join our conversation on Discord!
- +
Come chat with us on Discord!
+
diff --git a/src/components/Footer.css b/src/components/Footer.css index 29b5df2..1e203ea 100644 --- a/src/components/Footer.css +++ b/src/components/Footer.css @@ -50,6 +50,10 @@ footer { max-width: 40px; } +#footer-links .cta { + color: var(--brown); +} + @media screen and (max-width: 800px) { footer { margin: 1em 0em; diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index b3e1c6f..53144a6 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,8 +1,7 @@ import "./Footer.css"; -import logo from '../images/pse-logo.svg'; +import logo from '../images/tlsn-logo.svg'; import discord from "../images/discord_round.svg"; -import twitter from "../images/twitter_round.svg"; -import medium from '../images/medium-circle.svg'; +import config from "../config.json"; function copyright() { let websiteCreationYear = 2022; @@ -20,23 +19,15 @@ export default function Footer() {
); diff --git a/src/components/Hero.css b/src/components/Hero.css index 043b030..802325c 100644 --- a/src/components/Hero.css +++ b/src/components/Hero.css @@ -8,6 +8,10 @@ img.hero-graphic { object-fit: contain; } +#Hero .name { + color: var(--brown); +} + .border-2 { border-width: 2px; } diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx index e05d7f7..5d75e91 100644 --- a/src/components/Hero.tsx +++ b/src/components/Hero.tsx @@ -1,42 +1,25 @@ -import downArrow from "../images/arrow-down.svg"; -import triangleGraphic from "../images/triangle-gfc.svg"; -import lockGraphic from "../images/lock-gfc.svg"; +import github from "../images/github.svg"; import "./Hero.css"; +import config from "../config.json"; const Hero = () => ( -
-
-

Privacy & Scaling Explorations

-

- Enhancing Ethereum through cryptographic research. -

- -
-
- Explore our work -
-
- -
-
+
+

TLSNotary

+

+ Proof of data authenticity +

+

+ Export data from any web application and prove facts about it without compromising on privacy. +

+
-
-
- -
- {/* Lock */} -
-
- -
-
-
-

- We explore new use cases for zero-knowledge proofs and other cryptographic primitives through research and - proof-of-concepts. -

-
); diff --git a/src/components/How.css b/src/components/How.css new file mode 100644 index 0000000..8f543b3 --- /dev/null +++ b/src/components/How.css @@ -0,0 +1,21 @@ +#How { + display: flex; + flex-direction: row; + align-items: center; + padding-block: 12px; + padding: 100px; +} + +#How .body { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 2.5rem; +} + +#How .diagram-container { + padding: 10px; +} + +#How .diagram { + display: flex; +} diff --git a/src/components/How.tsx b/src/components/How.tsx new file mode 100644 index 0000000..56299ee --- /dev/null +++ b/src/components/How.tsx @@ -0,0 +1,34 @@ +import "./How.css"; +import diagram from "../images/overview-pretty.png"; + +export default function How() { + return ( +
+
+
+ +
+
+

How it works

+
+

+ TLSNotary leverages the ubiquitous TLS (Transport Layer Security) protocol to securely and privately prove a transcript of communications took place with a webserver. +
+
+ At the core of the TLSNotary protocol is dividing TLS session keys between two parties (Client and Notary) and then using secure two-party computation (2PC) to encrypt and authenticate requests from the Client to a TLS-enabled webserver. +
+
+ During the protocol neither the Client nor Notary are in posession of the full TLS session keys, they only know their shares of those keys. This preserves the security assumptions of TLS while at the same time allowing the Client to prove to the Notary the authenticity of the transcript. +
+
+ This is all achieved with full privacy. The Notary is never aware of which webserver is being queried, nor do they ever see the unencrypted communications. +
+
+ Furthermore, our protocol is transparent to the webserver. + In fact, the webserver is never aware that this process took place. +

+
+
+
+ ); +} diff --git a/src/components/Navbar.css b/src/components/Navbar.css index f1639e3..52b0acb 100644 --- a/src/components/Navbar.css +++ b/src/components/Navbar.css @@ -2,10 +2,10 @@ border-bottom: var(--border); display: grid; grid-template-columns: 1fr auto 1fr; - grid-template-areas: "anchor-links pse-link social-links"; + grid-template-areas: "tlsn-link anchor-links social-links"; font-weight: 600; font-size: 1.125rem; - padding-block: 36px; + padding-block: 12px; } #navbar > * { @@ -36,8 +36,8 @@ grid-area: anchor-links; } -#pse-link { - grid-area: pse-link; +#tlsn-link { + grid-area: tlsn-link; } #social-links { @@ -55,7 +55,7 @@ @media screen and (max-width: 800px) { #navbar { - grid-template-areas: "social-links pse-link menu-link"; + grid-template-areas: "tlsn-link social-links menu-link"; padding-inline: 1em; border-bottom: none; padding-block: 16px; diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 9d352a1..ddd4ec9 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -1,9 +1,9 @@ import { useState } from 'react'; -import logo from '../images/pse-logo.svg'; +import logo from '../images/tlsn-logo.svg'; import discord from '../images/discord_round.svg'; -import twitter from '../images/twitter_round.svg'; -import medium from '../images/medium-circle.svg'; +import github from "../images/github.svg"; import './Navbar.css' +import config from "../config.json"; function Navbar() { const [isOpen, setIsOpen] = useState(false); @@ -15,25 +15,21 @@ function Navbar() { return ( ) diff --git a/src/components/ProjectCard.css b/src/components/ProjectCard.css deleted file mode 100644 index 7c01357..0000000 --- a/src/components/ProjectCard.css +++ /dev/null @@ -1,105 +0,0 @@ -.card { - display: flex; - justify-content: space-between; - flex-direction: column; - border-radius: var(--border-radius); - box-shadow: var(--box-shadow); - background-color: var(--white); - padding: 1.2rem; - border: var(--border); -} - -.card-img-top { - border-radius: var(--border-radius); - object-fit: cover; - max-height: 150px; -} - -.project-description { - overflow: hidden; - height: 4.5em; /* exactly three lines */ - position: relative; -} - -.project-description::after { - content: ""; - text-align: right; - position: absolute; - bottom: 0; - right: 0; - width: 70%; - height: 1.2em; - background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%); -} - -.card-text-project { - line-height: 1.5rem; - font-weight: 400; - font-size: 1rem; -} - -.card-title { - display: flex; -} - -.card-title > div, -.card-title > a > div { - font-weight: 700; - font-size: 1.5rem; - padding-block: 1.5rem; -} - -.card-title > a > * { - display: inline-flex; -} - -.card-body { - align-self: flex-start; - flex: 1; -} - -.card-footer { - display: flex; - justify-content: space-between; - border-top: 2px solid #9ea3a7; - padding-top: 1rem; - margin-top: 2.5rem; - /* flex-wrap: wrap; - background-color: transparent; - padding: 1em 0em; - border-top: 2px solid var(--gray); - align-self: stretch; */ -} - -.docs-links { - display: flex; -} - -.social-links { - display: flex; - justify-content: flex-end; -} - -.card-footer .btn { - padding: 0.25rem 0.5rem; -} - -.link { - padding: 0.125rem; - margin: 0 auto; -} - -.link a { - display: flex; - align-items: center; -} - -.icon { - height: 2rem; - padding-bottom: calc(1rem - var(--padding)); - padding-inline: 1.125rem; -} - -.link-title { - text-transform: capitalize; -} diff --git a/src/components/ProjectCard.tsx b/src/components/ProjectCard.tsx deleted file mode 100644 index 8485772..0000000 --- a/src/components/ProjectCard.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import docs from "../images/website.svg"; -import github from "../images/github.svg"; -import discord from "../images/discord.svg"; -import twitter from "../images/twitter.svg"; -import telegram from "../images/telegram.svg"; -import img_link from "../images/box_arrow_out.svg"; -import "./ProjectCard.css"; -import ColorHash from "color-hash"; -import { title } from "process"; -import ProjectDescription from "./ProjectDescription"; - -export interface ProjectCardProps { - name: string; - short_name?: string; - description: string | string[]; - long_description?: string | string[]; - image?: string; - links?: Links[]; - renderBanner?: boolean; -} - -interface Links { - github?: string; - website?: string; - discord?: string; - twitter?: string; - telegram?: string; - documentation?: string; -} - -function renderLink(url: string, source: string, icon: string, button: boolean = false, text: boolean = false): any { - // The next few lines check if the link begins with a protocol like http or https, and if it doesn't, it adds the '//' to the beginning of the link to make it an http(s) link. - let RgExp = new RegExp("^(?:[a-z]+:)?//", "i"); - if (!RgExp.test(url)) { - url = "//" + url; - } - if (!button) { - return ( - - ); - } else { - return ( - - ); - } -} - -function renderBanner(name: string): any { - let hueRange = { min: 45, max: 360 }; - let colorHashText = new ColorHash({ hue: hueRange, lightness: [0.8, 0.9] }).hex(name); - let colorHashBG = new ColorHash({ - hue: hueRange, - lightness: [0.35, 0.4], - saturation: [0.65, 0.85, 1], - }).hex(name); - return ( - - - {name} - - - ); -} - -function renderDescription(description: string | string[]): any { - if (typeof description === "string") { - return

{description}

; - } - return description.map((text: string, index: number) => { - return ( -

- {text} -

- ); - }); -} - -function ProjectCard(props: ProjectCardProps) { - const docLinks = props.links - ? props.links.map((link) => { - if (link.github) { - return renderLink(link.github, "github", github); - } else if (link.documentation) { - return renderLink(link.documentation, "website", docs); - } else { - return null; - } - }) - : null; - - const socialLinks = props.links - ? props.links.map((link) => { - if (link.discord) { - return renderLink(link.discord, "discord", discord); - } else if (link.twitter) { - return renderLink(link.twitter, "twitter", twitter); - } else if (link.telegram) { - return renderLink(link.telegram, "telegram", telegram); - } else { - return null; - } - }) - : null; - - let img = (() => { - try { - if (props.image) { - let imageSource; - if (props.image.startsWith("http")) { - imageSource = props.image; - } else { - imageSource = require(`../images/${props.image}`); - } - - return {props.name}; - } else if (props.renderBanner == true || props.renderBanner == undefined) { - return renderBanner(props.short_name || props.name); - } else { - return null; - } - } catch (e) { - if (props.renderBanner == true || props.renderBanner == undefined) { - return renderBanner(props.short_name || props.name); - } else { - return null; - } - } - })(); - - const title = (props: ProjectCardProps) => { - let title_with_link; - if (props.links) { - for (let link in props.links) { - if (props.links[link].website) { - title_with_link = ( - -
{props.name}
-
- Go to project website - - ); - } - } - } - if (title_with_link) { - return title_with_link; - } - return
{props.name}
; - }; - - return ( -
- {img} -
-
{title(props)}
-
{renderDescription(props.description)}
-
- -
-
{docLinks}
-
{socialLinks}
-
-
- ); -} - -export default ProjectCard; diff --git a/src/components/ProjectDescription.css b/src/components/ProjectDescription.css deleted file mode 100644 index 2a59f9f..0000000 --- a/src/components/ProjectDescription.css +++ /dev/null @@ -1,80 +0,0 @@ -.btn { - display: inline-block; - padding: 10px 10px; - font-size: 15px; - cursor: pointer; - text-align: center; - text-decoration: none; - border: var(--border); - border-radius: 2em; -} - -.btn-close { - color: var(--black); - padding: 0; - float: right; - background-color: transparent; - border: none; -} - -.btn-close::after { - content: "×"; - font-size: 1.5rem; -} - -.btn-ext { - color: var(--black); - font-weight: 600; - background-color: var(--white); - margin-top: 1em; -} - -.column { - display: flex; - flex-direction: column; /* stacks the left and right headers above the bottom content */ -} - -h3 { - float: left; - font-size: 1.5rem; -} - -.modal-description { - margin-top: 1em; -} - -.ReactModal__Content { - inset: 25% 33% !important; - border: var(--border) !important; - border-radius: var(--border-radius) !important; -} - -.ReactModal__Overlay { - background-color: var(--gray-transparent); - opacity: 0; - transition: 300ms ease-in-out; -} - -.ReactModal__Overlay--after-open { - opacity: 1; -} - -.ReactModal__Overlay--before-close { - opacity: 0; -} - -.ReactModal__Body--open { - overflow: hidden; -} - -@media screen and (max-width: 1400px) { - .ReactModal__Content { - inset: 20% 25% !important; - } -} - -@media screen and (max-width: 800px) { - .ReactModal__Content { - inset: 20% 10% !important; - } -} diff --git a/src/components/ProjectDescription.tsx b/src/components/ProjectDescription.tsx deleted file mode 100644 index d2a044e..0000000 --- a/src/components/ProjectDescription.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useState } from "react"; -import Modal from "react-modal"; -import "./ProjectDescription.css"; - -Modal.setAppElement('#root'); - -function ProjectDescription(props:any) { - // For more descriptions modal - const [modalIsOpen, setmodalIsOpen] = useState(false); - - return ( - <> - - setmodalIsOpen(false)} - style={{ - overlay: { - backgroundColor: "rgba(0, 0, 0, 0.75)", - }, - }} - > -
-
-

{props.title}

- -
-
-
-

{props.description}

-
-
- - ); -} - -export default ProjectDescription; diff --git a/src/components/Projects.css b/src/components/Projects.css deleted file mode 100644 index 3034b76..0000000 --- a/src/components/Projects.css +++ /dev/null @@ -1,26 +0,0 @@ -#Projects { - padding-inline: 5rem; - padding: 4rem 3rem; -} - -#Projects > p { - font-size: 1.125rem; - font-weight: 400; - line-height: 120%; -} - -#Projects .Cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); - gap: 2.5rem; -} - -.CardSectionTitle { - text-shadow: -1px 1px 1px rgba(255, 255, 255, 0.66); -} - -@media screen and (max-width: 800px) { - #Projects { - padding-inline: 1rem; - } -} diff --git a/src/components/Projects.tsx b/src/components/Projects.tsx deleted file mode 100644 index 85dd27b..0000000 --- a/src/components/Projects.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import ProjectData from "../data/Projects.json"; -import { useState } from "react"; -import ProjectCard, { ProjectCardProps } from "./ProjectCard"; -import { shuffleFisherYates } from "../Utils"; -import "./Projects.css"; - -function Projects() { - const [cards] = useState([CreateCards(ProjectData, true)]); - - return ( -
-

What we work on

-
-

Explore how we integrate ZK primitives into decentralized applications

-
-
{cards}
-
- ); -} - -export default Projects; - -function CreateCards(cards: ProjectCardProps[], shuffle: boolean = true): JSX.Element[] { - let _cards = cards.map((card: ProjectCardProps) => { - return ; - }); - - if (shuffle) { - _cards = shuffleFisherYates(_cards as []); - } - - return _cards; -} diff --git a/src/components/Roadmap.css b/src/components/Roadmap.css new file mode 100644 index 0000000..78c2fb6 --- /dev/null +++ b/src/components/Roadmap.css @@ -0,0 +1,64 @@ +#Roadmap { + background-color: var(--light-brown); + padding: 100px; +} + +#Roadmap .cards { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 2.5rem; +} + +#Roadmap .border { + box-shadow: 2px 3px 5px var(--blue); +} + +#Roadmap .card { + display: flex; + justify-content: space-between; + flex-direction: column; + align-items: flex-start; + border-radius: var(--border-radius); + background: var(--light-blue); + padding: 1.2rem; +} + +#Roadmap .card-text { + color: var(--white); + line-height: 1.5rem; + font-weight: 600; + font-size: 1rem; +} + +#Roadmap .card-title { + display: flex; +} + +#Roadmap .card-title > div, +#Roadmap .card-title > a > div { + font-weight: 700; + font-size: 1.5rem; + padding-block: 1.5rem; +} + +#Roadmap .card-title > a > * { + display: inline-flex; +} + +#Roadmap .card-body { + align-self: flex-start; + flex: 1; +} + +#Roadmap .card-footer { + display: flex; + justify-content: space-between; + border-top: 2px solid #9ea3a7; + padding-top: 1rem; + margin-top: 2.5rem; + /* flex-wrap: wrap; + background-color: transparent; + padding: 1em 0em; + border-top: 2px solid var(--gray); + align-self: stretch; */ +} diff --git a/src/components/Roadmap.tsx b/src/components/Roadmap.tsx new file mode 100644 index 0000000..746aefe --- /dev/null +++ b/src/components/Roadmap.tsx @@ -0,0 +1,36 @@ +import "./Roadmap.css"; + +export default function Roadmap() { + return ( +
+

+ We're rebuilding the protocol from the ground up. +

+
+

Below are some development goals on our roadmap:

+
+
+
+
+
Implement the core protocol as a series of open-source Rust libraries
+
+
+
+
+
Build and release a Notary server implementation
+
+
+
+
+
Develop a web extension for the browser
+
+
+
+
+
Create developer tools to build on top of TLSNotary
+
+
+
+
+ ); +} diff --git a/src/components/Team.css b/src/components/Team.css deleted file mode 100644 index 55af93d..0000000 --- a/src/components/Team.css +++ /dev/null @@ -1,17 +0,0 @@ -#Team { - padding-inline: 5rem; - padding: 4rem 3rem; -} - -#Team .Cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); - gap: 1rem 2rem; - margin-top: 1rem; -} - -@media screen and (max-width: 800px) { - #Team { - padding-inline: 1em; - } -} diff --git a/src/components/Team.tsx b/src/components/Team.tsx deleted file mode 100644 index 816c0c1..0000000 --- a/src/components/Team.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import TeamData from "../data/Team.json"; -import TeamCard, { TeamMemberCardProps } from "./TeamMemberCard"; -import { shuffleFisherYates } from "../Utils"; -import "./Team.css"; - -const cards = CreateCards(true); - -function Teams() { - return ( -
-

Members

-
-

PSE is a team of 50 members, below you can find some of our team member's information.

-
{cards}
-
- ); -} - -export default Teams; - -function CreateCards(shuffle: boolean = true): JSX.Element[] { - let _cards = TeamData.map((card: TeamMemberCardProps) => { - return ; - }); - - if (shuffle) { - _cards = shuffleFisherYates(_cards as []); - } - - return _cards; -} diff --git a/src/components/TeamMemberCard.css b/src/components/TeamMemberCard.css deleted file mode 100644 index f744ac3..0000000 --- a/src/components/TeamMemberCard.css +++ /dev/null @@ -1,59 +0,0 @@ -.members-card { - display: flex; - justify-content: space-between; - flex-direction: column; - margin-top: 1rem; - border: 1px solid var(--gray-transparent); - border-radius: var(--border-radius); - background-color: var(--white); - box-shadow: var(--box-shadow); - padding: 2rem; -} - -.members-card-title { - font-weight: 600; - font-size: 1.5rem; - padding-bottom: 1rem; -} - -.card-text { - line-height: 150%; - padding-bottom: 1.5rem; -} - -.members-card-footer { - border-top: 2px solid var(--black); -} - -.members-card-footer a { - display: flex; - justify-content: space-between; - padding: 1rem 0px; - font-weight: 700; - text-decoration: none; - color: var(--black); -} - -.members-card-footer > *:not(:first-child) { - border-top: 2px solid var(--black); -} - -.team-link { - padding: 0.125rem; - display: flex; - justify-content: space-between; - align-items: center; -} - -.team-link a { - display: flex; - align-items: center; -} - -.team-icon { - height: 1.5rem; -} - -.team-link-title { - text-transform: capitalize; -} diff --git a/src/components/TeamMemberCard.tsx b/src/components/TeamMemberCard.tsx deleted file mode 100644 index f36dbad..0000000 --- a/src/components/TeamMemberCard.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import globe from "../images/globe.svg"; -import github from "../images/github.svg"; -import discord from "../images/discord_round.svg"; -import twitter from "../images/twitter_round.svg"; -import telegram from "../images/telegram.svg"; -import "./TeamMemberCard.css"; -const images = { - github, - discord, - twitter, - telegram, -} as any - -export interface TeamMemberCardProps { - name: string; - short_name?: string; - description: string | string[]; - long_description?: string | string[]; - image?: string; - links?: Link[]; - renderBanner?: boolean; -} - -interface Link { - provider: string - url: string -} - -function renderDescription(description: string | string[]): any { - if (typeof description === "string") { - return

{description}

; - } - return description.map((text: string, index: number) => { - return ( -

- {text} -

- ); - }); -} - -function TeamMemberCard(props: TeamMemberCardProps) { - return ( -
-
-
{props.name}
- {renderDescription(props.description)} -
-
- {(props.links || []).map(({ url, provider }) => ( - -
{provider}
- {''} -
- ))} -
-
- ); -} - -export default TeamMemberCard; diff --git a/src/components/Usecases.css b/src/components/Usecases.css new file mode 100644 index 0000000..4314d24 --- /dev/null +++ b/src/components/Usecases.css @@ -0,0 +1,84 @@ +#Usecases { + padding-inline: 5rem; + padding: 4rem 3rem; + background-color: var(--background-blue); + justify-items: center; +} + +#Usecases * p { + color: var(--white); + font-size: 1.125rem; + font-weight: 400; + line-height: 120%; +} + +#Usecases .header { + color: var(--white); +} + +#Usecases .body { + max-width: 67%; + margin: auto; +} + +#Usecases .cards { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2.5rem; +} + +#Usecases .card { + display: flex; + justify-content: space-between; + flex-direction: column; + align-items: flex-start; + border-radius: var(--border-radius); + background: var(--light-blue); + padding: 1.2rem; +} + +#Usecases .card-text { + color: var(--white); + line-height: 1.5rem; + font-weight: 600; + font-size: 1rem; +} + +#Usecases .card-title { + display: flex; +} + +#Usecases .card-title > div, +#Usecases .card-title > a > div { + font-weight: 700; + font-size: 1.5rem; + padding-block: 1.5rem; +} + +#Usecases .card-title > a > * { + display: inline-flex; +} + +#Usecases .card-body { + align-self: flex-start; + flex: 1; +} + +#Usecases .card-footer { + display: flex; + justify-content: space-between; + border-top: 2px solid #9ea3a7; + padding-top: 1rem; + margin-top: 2.5rem; + /* flex-wrap: wrap; + background-color: transparent; + padding: 1em 0em; + border-top: 2px solid var(--gray); + align-self: stretch; */ +} + +@media screen and (max-width: 800px) { + #Usecases { + padding-inline: 1rem; + } +} diff --git a/src/components/Usecases.tsx b/src/components/Usecases.tsx new file mode 100644 index 0000000..da58c1e --- /dev/null +++ b/src/components/Usecases.tsx @@ -0,0 +1,60 @@ +import "./Usecases.css"; + +export default function Usecases() { + return ( +
+
+

What can TLSNotary do?

+
+

+ With TLSNotary, you can create cryptographic proofs of authenticity for any data on the web, even your private data. + Using our protocol you can securely: +

+
+
+
+
+
Prove private information about yourself is stored on a platform.
+
+
+
+
+
Prove you received a private message from someone.
+
+
+
+
+
Prove you received a money transfer.
+
+
+
+
+
Create a provable snapshot of a webpage.
+
+
+
+
+

Is it secure?

+
+

+ One may assume that TLSNotary requires a “man-in-the-middle” setup where the Notary snoops on the connection with the webserver. + Fortunately, this is not true! Data is kept private even from the Notary. +
+
+ See below for more details on how it works. +

+
+

What's the catch?

+
+

+ TLSNotary does require a trust assumption. + A Verifier of a proof must trust that the Notary did not collude with the Prover to forge it. + This trust can be minimized by requiring multiple proofs each signed by different Notaries. +
+
+ In some applications the Verifier can act as the Notary themselves, which allows for fully trustless proofs! +

+
+
+ ); +} diff --git a/src/config.json b/src/config.json new file mode 100644 index 0000000..8fbb0b7 --- /dev/null +++ b/src/config.json @@ -0,0 +1,8 @@ +{ + "links": { + "discord": "https://discord.gg/9XwESXtcN7", + "repo": "https://github.com/tlsnotary/tlsn", + "docs": "https://tlsnotary.github.io/docs-mdbook/", + "pse": "https://appliedzkp.org/" + } +} diff --git a/src/data/Example.md b/src/data/Example.md deleted file mode 100644 index abf79a7..0000000 --- a/src/data/Example.md +++ /dev/null @@ -1,57 +0,0 @@ -# Examples - -## Project Example - -```json - { - "name": "Test", - "short_name": "TEST", - "description": "Black Magic", - "long_description": "Black Magic", - "image": "banner.png", - "links": [ - { - "website": "https://discord.gg" - }, - { - "twitter": "https://discord.gg/1" - }, - { - "telegram": "https://discord.gg/2" - }, - { - "discord": "https://discord.gg/3" - }, - { - "github": "https://discord.gg/4" - } - ] -} -``` - -## Team Member Example - -```json - { - "name": "NAME / USERNAME", - "description": "Whatever description you want, try to keep it tweet sized", - "image": "{filename}(Upload image to /src/images and put the file name here, will add support for external images soon)", - "links": [ - { - "github": "https://github.com/USERNAME" - }, - { - "twitter": "https://twitter.com/USERNAME" - }, - { - "discord": "https://discord.com//users/USER_ID (NOT USERNAME, https://i.imgur.com/6CDZ1dp.gifv for how-to)" - }, - { - "telegram": "t.me/USERNAME" - }, - { - "website": "{YOUR_WEBSITE}" - } - ] - } -``` diff --git a/src/data/Projects.json b/src/data/Projects.json deleted file mode 100644 index f5c4e13..0000000 --- a/src/data/Projects.json +++ /dev/null @@ -1,225 +0,0 @@ -[ - { - "name": "Zkopru", - "image": "zkopru-cover.png", - "description": "Zkopru is an optimistic rollup that uses zero knowledge proofs to enable private, low-cost transactions with ETH, ERC-20s and NFTs on layer 2.", - "links": [ - { - "website": "https://zkopru.network/" - }, - { - "github": "https://github.com/zkopru-network" - }, - { - "discord": "https://discord.gg/R8QKzad8u4" - } - ] - }, - { - "name": "BLS Wallet", - "image": "bls.svg", - "description": "Reduce transaction costs on evm-L2s using BLS signatures. The smart contract wallet also includes: recovery, multi-action, gas-less transactions, and upgradability.", - "links": [ - { - "website": "https://blswallet.org/" - }, - { - "github": "https://github.com/web3well/bls-wallet" - } - ] - }, - { - "name": "zkEVM", - "image": "zkEVM.svg", - "description": "A zk-rollup that can generate zk proofs for general EVM verification. This allows us to build a fully EVM-compatible zk-Rollup, which any existing Ethereum application can easily migrate to.", - "links": [ - { - "documentation": "https://privacy-scaling-explorations.github.io/zkevm-docs/" - }, - { - "website": "https://github.com/privacy-scaling-explorations/zkevm-specs" - }, - { - "github": "https://github.com/privacy-scaling-explorations/zkevm-circuits" - } - ] - }, - { - "name": "MACI", - "image": "MACI.svg", - "description": "MACI (Minimal Anti-Collusion Infrastructure) uses zero knowledge proofs for collusion resistance in blockchain voting (such as quadratic funding mechanisms) by making it impossible for anyone other than the vote coordinator to verify how a specific user voted. MACI also ensures correct execution of the votes, allowing anyone to verify the results.", - "links": [ - { - "website": "" - }, - { - "github": "https://github.com/appliedzkp/maci" - } - ] - }, - { - "name": "Unirep", - "description": "Unirep allows anonymous members of a group to give, receive, and prove reputation without revealing their identity. Applications or people can act as attesters and build their own reputation tokens on top of a shared Unirep contract.", - "image": "unirep.svg", - "links": [ - { - "website": "https://unirep.social/" - }, - { - "github": "https://github.com/unirep" - }, - { - "discord": "https://discord.gg/qrqq8SeN7F" - } - ] - }, - { - "name": "Semaphore", - "description": "Semaphore is a protocol, designed to be a simple and generic privacy layer for Ethereum DApps. Using zero knowledge, Ethereum users can prove their membership of a group and send signals such as votes or endorsements without revealing their original identity.", - "image": "semaphore.svg", - "links": [ - { - "website": "https://semaphore.appliedzkp.org/" - }, - { - "github": "https://github.com/semaphore-protocol/" - }, - { - "telegram": "https://t.me/joinchat/B-PQx1U3GtAh--Z4Fwo56A" - } - ] - }, - { - "name": "ZK-kit", - "description": "ZK-kit is a set of NPM modules (algorithms or utility functions) that can be reused in different projects and zero-knowledge protocols, making it easier for developers to access ready-to-use and tested libraries for common tasks.", - "image": "zk-kit.svg", - "links": [ - { - "github": "https://github.com/privacy-scaling-explorations/zk-kit" - }, - { - "discord": "https://discord.gg/9B9WgGP6YM" - } - ] - }, - { - "name": "Interep", - "description": "Private reputation and identity system allowing services to verify that users belong to a certain group or meet certain reputation criteria without revealing their identities. Users can anonymously export reputation from platforms such as Twitter and Github.", - "image": "interep.svg", - "links": [ - { - "website": "https://interep.link/" - }, - { - "github": "https://github.com/interep-project" - }, - { - "discord": "https://discord.gg/jMfye2mWcf" - } - ] - }, - { - "name": "Clr.fund for Everyone", - "short_name": "Clr.fund", - "image": "clr.svg", - "description": "Infrastructure to make it easy for any community to run their own CLR round with clr.fund.", - "links": [ - { - "website": "https://qf.ethprague.com/" - }, - { - "documentation": "https://clrfund.gitbook.io/deployer/" - }, - { - "github": "https://github.com/quadratic-funding/qfi" - } - ] - }, - { - "name": "Rate Limiting Nullifier", - "short_name": "RLN", - "image": "rln.svg", - "description": "RLN is a construct based on zero-knowledge proofs that enables spam prevention mechanism for decentralized, anonymous environments. In anonymous environments, the identity of the entities is unknown.", - "links": [ - { - "website": "https://ethresear.ch/t/semaphore-rln-rate-limiting-nullifier-for-spam-prevention-in-anonymous-p2p-setting/5009" - }, - { - "github": "https://github.com/bdim1/rlnapp" - } - ] - }, - { - "name": "zk-chat", - "image": "zkchat.svg", - "description": "Anonymous and private chat environments, using Interep for a privacy preserving registry and sybil resistance and RLN for spam protection.", - "links": [ - { - "website": "https://zkchat.org" - }, - { - "github": "https://github.com/njofce/zk-chat" - } - ] - }, - { - "name": "COCO", - "description": "Collaborative content curation of online communities using a double-or-nothing challenge mechanism.", - "image": "Coco.svg", - "links": [ - { - "website": "https://www.cocoverse.club/" - }, - { - "github": "https://github.com/Janmajayamall/coco-contracts" - }, - { - "telegram": "https://t.me/+A47HJeqh0-tlODI1" - } - ] - }, - { - "name": "Trusted Setup", - "image": "trust-setup.svg", - "description": "Open source infrastructure for running a trusted setup ceremony in which many people participate in generating entropy which will secure a cryptographic protocol. Perpetual Powers of Tau: A universal ceremony for the initial phase of a trusted setup. MPC Phase 2 UI: UI for a CLI or browser-based ceremony for the second, circuit-specific phase for Groth-16 SNARKs. MPC Phase2 Suite: All-in-one suite of tools for conducting Phase 2 Trusted Setup ceremonies for multiple and large Groth-16 SNARKs circuits.", - "links": [ - { - "github": "https://github.com/privacy-scaling-explorations/perpetualpowersoftau" - }, - { - "github": "https://github.com/zkparty/setup-mpc-ui" - }, - { - "github": "https://github.com/quadratic-funding/mpc-phase2-suite" - } - ] - }, - { - "name": "TLSNotary", - "short_name": "TLSN", - "description": "TLSNotary leverages the ubiquitous TLS protocol to allow users to privately export their data from any webserver in a provable way.", - "image": "tlsn.png", - "links": [ - { - "website": "https://tlsnotary.org" - }, - { - "github": "https://github.com/tlsnotary/tlsn" - }, - { - "discord": "https://discord.gg/9XwESXtcN7" - } - ] - }, - { - "name": "ZK-Keeper", - "short_name": "ZK-Keeper", - "description": "ZK-Keeper is a browser plugin which enables Zero knowledge identity management and proof generation", - "image": "zk-keeper.png", - "links": [ - { - "github": "https://github.com/faa/zk-keeper" - } - ] - } -] \ No newline at end of file diff --git a/src/data/Team.json b/src/data/Team.json deleted file mode 100644 index 0c4d45a..0000000 --- a/src/data/Team.json +++ /dev/null @@ -1,166 +0,0 @@ -[ - { - "name": "sinu", - "description": "TLSNotary Project Lead and Software Engineer", - "links": [ - { - "provider": "github", - "url": "https://github.com/sinui0" - }, - { - "provider": "twitter", - "url": "https://twitter.com/sinu_eth" - } - ] - }, - { - "name": "AtHeartEngineer", - "description": "Full stack / systems engineer; working on RLN", - "links": [ - { - "provider": "github", - "url": "https://github.com/atheartengineer" - }, - { - "provider": "twitter", - "url": "https://twitter.com/atheartengineer" - } - ] - }, - { - "name": "Geoff Lamperd", - "description": "Full stack engineer; working on Trusted Setup and Interep", - "links": [ - { - "provider": "github", - "url": "https://github.com/glamperd" - }, - { - "provider": "twitter", - "url": "https://twitter.com/glamperd" - } - ] - }, - { - "name": "James Zaki", - "description": "BLS Wallet project lead and software engineer", - "links": [ - { - "provider": "github", - "url": "https://github.com/jzaki" - }, - { - "provider": "twitter", - "url": "https://twitter.com/james_zaki" - } - ] - }, - { - "name": "Beyondr (Jeo)", - "description": "Designer & developer. Main project is ZKOPRU at the moment but also working on other auxillary projects.", - "links": [ - { - "provider": "github", - "url": "https://github.com/thebeyondr" - }, - { - "provider": "twitter", - "url": "https://twitter.com/thebeyondr" - } - ] - }, - { - "name": "Jacob Caban-Tomski", - "description": "Full stack engineer; working on BLS Wallet", - "links": [ - { - "provider": "github", - "url": "https://github.com/jacque006" - } - ] - }, - { - "name": "Chiali", - "description": "All things UX & pretty designs. Unirep and other projects", - "links": [ - { - "provider": "github", - "url": "https://github.com/ChialiTsai" - }, - { - "provider": "twitter", - "url": "https://twitter.com/Chia_Tea" - } - ] - }, - { - "name": "Justin Martin", - "description": "Zero knowledge sorting hat. Making opportunities for smart people to advance ZK and privacy", - "links": [ - { - "provider": "github", - "url": "https://github.com/TheFrozenFire" - }, - { - "provider": "twitter", - "url": "https://twitter.com/thefrozenfire" - } - ] - }, - { - "name": "Cedoor", - "description": "Full stack engineer; working on Semaphore and Interep", - "links": [ - { - "provider": "github", - "url": "https://github.com/cedoor" - }, - { - "provider": "twitter", - "url": "https://twitter.com/cedoor_" - } - ] - }, - { - "name": "Rachel", - "description": "Design strategy for ZK explorations", - "links": [ - { - "provider": "github", - "url": "https://github.com/rachelaux" - }, - { - "provider": "twitter", - "url": "https://twitter.com/rachel_aux" - } - ] - }, - { - "name": "Vivian", - "description": "Unirep Project Lead and Software Engineer", - "links": [ - { - "provider": "github", - "url": "https://github.com/vivianjeng" - }, - { - "provider": "twitter", - "url": "https://twitter.com/vivi4322" - } - ] - }, - { - "name": "0xjei", - "description": "Software Engineer; working on MACI/QFI and Trusted Setup", - "links": [ - { - "provider": "github", - "url": "https://github.com/0xjei" - }, - { - "provider": "twitter", - "url": "https://twitter.com/0xjei" - } - ] - } -] diff --git a/src/images/eth-logo-blue.svg b/src/images/eth-logo-blue.svg new file mode 100644 index 0000000..393fec4 --- /dev/null +++ b/src/images/eth-logo-blue.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + diff --git a/src/images/overview-pretty.png b/src/images/overview-pretty.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4b6adc5b5e56cbcdf37c466f5aa294aa05c386 GIT binary patch literal 35422 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 JLMxaD{~w+xR?7eY literal 0 HcmV?d00001 diff --git a/src/images/tlsn-logo.svg b/src/images/tlsn-logo.svg new file mode 100644 index 0000000..1b6d6d0 --- /dev/null +++ b/src/images/tlsn-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/index.css b/src/index.css index b783d75..fd384b0 100644 --- a/src/index.css +++ b/src/index.css @@ -12,6 +12,10 @@ --white: #fcfcfc; --box-shadow: -5px 3px 0px var(--gray); --black: #151616; + --blue: #243f5f; + --light-blue: #8ca4c1; + --light-brown: #ece5d8; + --brown: #a27f3c; --twitter: #1da1f2; --telegram: #0088cc; @@ -21,19 +25,20 @@ --discord: #7289da; --website: var(--green); - --background: #f3f0fe; + --background: #fafbfc; + --background-blue: #243f5f; --text-color: #151616; - --border-color: var(--text-color); - --border-radius: 4px; + --border-color: var(--blue); + --border-radius: 8px; --border: 1px solid var(--border-color); --link-bold: #854ad1; --padding: 10px; } body { - color: var(--black); + color: var(--blue); margin: 0 auto; - max-width: 1800px; + max-width: 1440px; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; @@ -46,7 +51,7 @@ h1, h2, h3 { font-weight: 700; - color: var(--black); + color: var(--blue); padding: 0px; margin: 0px; } @@ -60,7 +65,7 @@ h2 { } p { - color: var(--black); + color: var(--blue); font-weight: 400; font-size: 1.125rem; line-height: 120%; @@ -70,13 +75,24 @@ p { a { text-decoration: none; - color: var(--black); + color: var(--light-blue); } html { scroll-behavior: smooth; } +.pill-button { + font-family: "Inter", sans-serif; + background-color: var(--white); + border: 3px solid var(--blue); + color: var(--black); + text-align: center; + font-size: 20px; + border-radius: 32px; + padding: 18px 24px; +} + /* Responsiveness */ diff --git a/src/index.tsx b/src/index.tsx index 33771bb..e3d6e64 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -4,6 +4,7 @@ import './index.css'; import HomePage from './HomePage'; import { BrowserRouter, Routes, Route } from 'react-router-dom'; import reportWebVitals from './reportWebVitals'; +import './config' const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); root.render(