Showing preview only (370K chars total). Download the full file or copy to clipboard to get everything.
Repository: SaaSBold/saasbold-lite
Branch: main
Commit: fda44cf7879e
Files: 61
Total size: 349.9 KB
Directory structure:
gitextract_3ev1jqlw/
├── .gitignore
├── LICENSE
├── README.md
├── next.config.js
├── package.json
├── postcss.config.js
├── prisma/
│ └── schema.prisma
├── prisma.config.ts
├── src/
│ ├── app/
│ │ ├── (site)/
│ │ │ ├── layout.tsx
│ │ │ ├── page.tsx
│ │ │ └── providers.tsx
│ │ ├── layout.tsx
│ │ └── not-found.tsx
│ ├── components/
│ │ ├── 404/
│ │ │ └── index.tsx
│ │ ├── Blog/
│ │ │ └── BlogItem.tsx
│ │ ├── Common/
│ │ │ ├── Breadcrumb.tsx
│ │ │ ├── Breadcrumbs.tsx
│ │ │ ├── PreLoader.tsx
│ │ │ ├── SectionHeader.tsx
│ │ │ └── SectionTitleH2.tsx
│ │ ├── Footer/
│ │ │ └── index.tsx
│ │ ├── Header/
│ │ │ ├── Dropdown.tsx
│ │ │ ├── ThemeSwitcher.tsx
│ │ │ ├── index.tsx
│ │ │ └── menuData.ts
│ │ └── Home/
│ │ ├── Blog/
│ │ │ └── index.tsx
│ │ ├── CallToAction/
│ │ │ └── index.tsx
│ │ ├── Counter/
│ │ │ ├── CountUp.tsx
│ │ │ └── index.tsx
│ │ ├── FAQ/
│ │ │ ├── FaqItem.tsx
│ │ │ ├── faqData.ts
│ │ │ └── index.tsx
│ │ ├── Features/
│ │ │ ├── FeatureItem.tsx
│ │ │ ├── featuresData.ts
│ │ │ └── index.tsx
│ │ ├── FeaturesWithImage/
│ │ │ ├── FeatureItem.tsx
│ │ │ ├── featuresData.ts
│ │ │ └── index.tsx
│ │ ├── Hero/
│ │ │ ├── Brand.tsx
│ │ │ ├── brandData.tsx
│ │ │ └── index.tsx
│ │ ├── Newsletter/
│ │ │ ├── Graphics.tsx
│ │ │ └── index.tsx
│ │ ├── Pricing/
│ │ │ ├── PriceItem.tsx
│ │ │ └── index.tsx
│ │ ├── Testimonials/
│ │ │ ├── TestimonialItem.tsx
│ │ │ ├── index.tsx
│ │ │ └── testmonialsData.ts
│ │ └── index.tsx
│ ├── libs/
│ │ └── scrollActive.js
│ ├── pricing/
│ │ └── pricingData.ts
│ ├── styles/
│ │ ├── globals.css
│ │ └── satoshi.css
│ └── types/
│ ├── blog.ts
│ ├── faq.ts
│ ├── featureItem.ts
│ ├── featureWithImg.ts
│ ├── menu.ts
│ ├── priceItem.ts
│ └── testimonial.ts
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
.env
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
# SaaSBold Lite
SaaSBold is a **full-stack SaaS boilerplate** for Next.js - crafted with great attention to both front-end and back-end functionality. Developer experience has been a key focus, comes with all the essential integrations features with a one-click deployment option on Vercel.

- [🚀 Live Demo](https://demo.saasbold.com/)
- [📘 Documentation](https://saasbold.com/docs)
- [☕ Website](https://saasbold.com/)
- [🔥 Pricing and FAQ](https://saasbold.com/#pricing)
## Installation
### Prerequisites
To get started with SaaSBold, ensure you have the following prerequisites installed and set up:
- Node.js 18.x or later (recommended to use Node.js 20.x or later)
### Cloning the Repository
Clone the repository using the following command:
```bash
git clone https://github.com/SaaSBold/saasbold-lite.git
```
> Windows Users: If you face issues while cloning, place the repository near the root of your drive.
1. Install dependencies:
```bash
npm install
# or
yarn install
```
> Some included packages may cause peer-deps issue with React 19 while installing.
>
> On npm use the `--legacy-peer-deps` flag as a workaround for that at the moment.
2. Start the development server:
```bash
npm run dev
# or
yarn dev
```
## SaaSBold Features and Integrations ⚡

### 💳 Payments and Subscriptions
- Stripe integration for billing users
- Paddle and LemonSqueezy support coming soon
### 🔒 Authentication
- Magic Link, Social Login/Auth, Email/Pass Authentication
- Automatic sync of user data in PostgreSQL
- Private/protected pages & API Calls
### 📧 Emails
- Seamless transactional email solution
- Built-in Email Templates for various purposes
### 🛠️ Database
- Ready-to-use PostgreSQL database with Prisma integration
- Easily switch to other databases like MySQL or MongoDB
- Efficient performance and database management
### 👩💼 Admin Dashboard
- Manage user roles, permissions, and access controls
- UI Components for Admin Dashboard
### 👤 User Dashboard
- Control account settings and preferences
- Intuitive interface with smooth API integrations
### 📰 Marketing / Newsletter
- Automatically add new users to MailChimp list
- Send newsletters to your SaaS user base
### ✨ AI Integration
- Ready-to-use AI integration with Open AI
### 🔍 Algolia Integration
- Ready-to-use Algolia integration for site search
### 🙌 Detailed comparison between the free, starter, and professional versions of SaaSBold
| Feature | Lite | Starter | Professional |
|---------------------|------------|----------|--------------|
| Next.js Landing Page | ✅ Yes | ✅ Yes | ✅ Yes |
| All The Integrations | ❌ No | ✅ Yes | ✅ Yes |
| Functional Blog with Sanity | ❌ No | ✅ Yes | ✅ Yes |
| Functional Admin Dashboard | ❌ No | ❌ No | ✅ Yes |
| Functional User Dashboard | ❌ No | ❌ No | ✅ Yes |
| Figma Design Source File | ❌ No | ❌ No | ✅ Yes | ✅ Yes |
| Use with Commercial Projects | ✅ Yes | ✅ Yes | ✅ Yes |
| Lifetime Free Updates | ✅ Yes | ✅ Yes | ✅ Yes |
| Email Support | ❌ No | ✅ Yes | ✅ Yes |
| Community Support | ✅ Yes | ✅ Yes | ✅ Yes |
================================================
FILE: next.config.js
================================================
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
remotePatterns: [
{
protocol: "https",
hostname: "cdn.sanity.io",
port: "",
},
{
protocol: "https",
hostname: "lh3.googleusercontent.com",
port: "",
},
{
protocol: "https",
hostname: "avatars.githubusercontent.com",
port: "",
},
{
protocol: "https",
hostname: "pub-b7fd9c30cdbf439183b75041f5f71b92.r2.dev",
port: "",
},
],
},
};
module.exports = nextConfig;
================================================
FILE: package.json
================================================
{
"name": "saasbold-lite",
"version": "1.2.1",
"private": true,
"engines": {
"node": ">=20"
},
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"stripe:listen": "stripe listen --forward-to http://localhost:3000/api/stripe/webhook",
"check-format": "prettier --check .",
"check-lint": "eslint . --ext ts --ext tsx --ext js",
"check-style": "npm run check-format && npm run check-lint",
"fix-format": "prettier --write .",
"fix-lint": "eslint --fix .",
"fix-style": "npm run fix-format && npm run fix-lint",
"test-build": "npm run check-style && npm run build"
},
"dependencies": {
"next": "16.0.10",
"next-themes": "^0.2.1",
"nextjs-toploader": "^1.6.6",
"react": "^19.2.1",
"react-dom": "^19.2.1"
},
"devDependencies": {
"@prisma/client": "^7.1.0",
"@tailwindcss/postcss": "^4.1.17",
"@types/node": "^24.10.2",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@typescript-eslint/eslint-plugin": "^6.18.0",
"@typescript-eslint/parser": "^6.18.0",
"autoprefixer": "^10.0.1",
"eslint": "^8.56.0",
"eslint-config-next": "15.2.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.2",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"postcss": "^8",
"prettier": "^3.1.1",
"prettier-plugin-tailwindcss": "^0.5.11",
"prisma": "^7.1.0",
"tailwindcss": "^4.1.17",
"typescript": "^5.3.3"
}
}
================================================
FILE: postcss.config.js
================================================
module.exports = {
plugins: {
"@tailwindcss/postcss": {},
},
};
================================================
FILE: prisma/schema.prisma
================================================
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgresql"
}
generator client {
provider = "prisma-client-js"
}
// model Test {
// id Int @id @default(autoincrement())
// }
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model ApiKey {
id String @id @default(cuid())
key String
name String @unique
userId String
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(cuid())
name String?
email String? @unique
emailVerified DateTime?
image String?
password String?
passwordResetToken String? @unique
passwordResetTokenExp DateTime?
role String? @default("USER")
stripeCustomerId String? @unique @map(name: "stripe_customer_id")
stripeSubscriptionId String? @unique @map(name: "stripe_subscription_id")
stripePriceId String? @map(name: "stripe_price_id")
stripeCurrentPeriodEnd DateTime? @map(name: "stripe_current_period_end")
createdAt DateTime @default(now())
accounts Account[]
sessions Session[]
apiKeys ApiKey[]
}
model VerificationToken {
id String @id @default(cuid())
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
================================================
FILE: prisma.config.ts
================================================
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations'
},
datasource: {
url: env('DATABASE_URL'),
},
});
================================================
FILE: src/app/(site)/layout.tsx
================================================
import "../../styles/globals.css";
import "../../styles/satoshi.css";
import "../../styles/globals.css";
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import { Providers } from "./providers";
import NextTopLoader from "nextjs-toploader";
import Loader from "@/components/Common/PreLoader";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<>
<Loader />
<Providers>
<NextTopLoader
color="#635BFF"
crawlSpeed={300}
showSpinner={false}
shadow="none"
/>
<Header />
{children}
<Footer />
</Providers>
</>
);
}
================================================
FILE: src/app/(site)/page.tsx
================================================
import Home from "@/components/Home";
import { Metadata } from "next";
export const metadata: Metadata = {
title: `Full-Stack SaaS Boilerplate for Next.js - SaaSBold Demo`,
description: `A full-stack SaaS boilerplate and starter kit comes with all essential integrations, pages, components, user/admin dashboards, landing page, design source and everything you need to turn your feature-rich SaaS startup idea into reality in a day!`,
openGraph: {
type: "website",
title: `Full-Stack SaaS Boilerplate for Next.js - SaaSBold Demo`,
description: `A full-stack SaaS boilerplate and starter kit comes with all essential integrations, pages, components, user/admin dashboards, landing page, design source and everything you need to turn your feature-rich SaaS startup idea into reality in a day!`,
images:
"https://ucarecdn.com/4b0ffd0e-90b0-4a59-b63c-f5ecee0ae575/saasbold.jpg",
},
twitter: {
card: "summary_large_image",
title: `Full-Stack SaaS Boilerplate for Next.js - SaaSBold Demo`,
description: `A full-stack SaaS boilerplate and starter kit comes with all essential integrations, pages, components, user/admin dashboards, landing page, design source and everything you need to turn your feature-rich SaaS startup idea into reality in a day!`,
images:
"https://ucarecdn.com/4b0ffd0e-90b0-4a59-b63c-f5ecee0ae575/saasbold.jpg",
},
};
export default function HomePage() {
return (
<main>
<Home />
</main>
);
}
================================================
FILE: src/app/(site)/providers.tsx
================================================
"use client";
import { ThemeProvider } from "next-themes";
export function Providers({ children }: { children: React.ReactNode }) {
return (
<ThemeProvider attribute="class" enableSystem={false} defaultTheme="light">
{children}
</ThemeProvider>
);
}
================================================
FILE: src/app/layout.tsx
================================================
import "../styles/globals.css";
import "../styles/satoshi.css";
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"] });
const layout = ({ children }: { children: React.ReactNode }) => {
return (
<html lang='en' suppressHydrationWarning={true}>
<body
className={`${inter.className} flex min-h-screen flex-col dark:bg-[#151F34]`}
>
{children}
</body>
</html>
);
};
export default layout;
================================================
FILE: src/app/not-found.tsx
================================================
import NotFound from "@/components/404";
export default function NotFoundPage() {
return <NotFound />;
}
================================================
FILE: src/components/404/index.tsx
================================================
import Image from "next/image";
import Link from "next/link";
import React from "react";
const NotFound = () => {
return (
<section className='py-17.5 lg:py-22.5 xl:py-27.5 2xl:py-37.5'>
<div className='mx-auto w-full max-w-[575px] px-4 sm:px-8 xl:px-0'>
<div className='relative z-1 pt-[187px]'>
<div className='absolute left-0 top-0 -z-1'>
<Image
src='/images/support/grid-404.svg'
alt='grid'
width={575}
height={460}
className='dark:opacity-20'
/>
</div>
<div className='text-center'>
<div className='mx-auto mb-10 flex h-22.5 w-full max-w-[90px] items-center justify-center rounded-full border border-stroke bg-white shadow-error'>
<svg
width='50'
height='51'
viewBox='0 0 50 51'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M24.9998 5.80566C14.3568 5.80566 5.729 14.4335 5.729 25.0765C5.729 35.7195 14.3568 44.3473 24.9998 44.3473C35.6428 44.3473 44.2707 35.7195 44.2707 25.0765C44.2707 14.4335 35.6428 5.80566 24.9998 5.80566ZM2.604 25.0765C2.604 12.7076 12.631 2.68066 24.9998 2.68066C37.3687 2.68066 47.3957 12.7076 47.3957 25.0765C47.3957 37.4454 37.3687 47.4723 24.9998 47.4723C12.631 47.4723 2.604 37.4454 2.604 25.0765ZM17.8194 34.2379C19.8452 32.7363 22.3228 31.8473 24.9998 31.8473C27.6769 31.8473 30.1544 32.7363 32.1803 34.2379C32.8735 34.7518 33.019 35.7303 32.5051 36.4236C31.9912 37.1169 31.0127 37.2623 30.3194 36.7484C28.802 35.6237 26.9705 34.9723 24.9998 34.9723C23.0292 34.9723 21.1977 35.6237 19.6803 36.7484C18.987 37.2623 18.0084 37.1169 17.4946 36.4236C16.9807 35.7303 17.1261 34.7518 17.8194 34.2379Z'
fill='#0E172B'
/>
<path
d='M33.3332 21.9515C33.3332 23.6774 32.4004 25.0765 31.2498 25.0765C30.0992 25.0765 29.1665 23.6774 29.1665 21.9515C29.1665 20.2256 30.0992 18.8265 31.2498 18.8265C32.4004 18.8265 33.3332 20.2256 33.3332 21.9515Z'
fill='#0E172B'
/>
<path
d='M20.8332 21.9515C20.8332 23.6774 19.9004 25.0765 18.7498 25.0765C17.5992 25.0765 16.6665 23.6774 16.6665 21.9515C16.6665 20.2256 17.5992 18.8265 18.7498 18.8265C19.9004 18.8265 20.8332 20.2256 20.8332 21.9515Z'
fill='#0E172B'
/>
</svg>
</div>
<h1 className='mb-5 font-satoshi text-heading-4 font-bold -tracking-[1.6px] text-black dark:text-white lg:text-heading-2'>
Page not found
</h1>
<p className='mx-auto mb-10 w-full max-w-[355px]'>
The page you are looking for doesn’t exist. Here are some helpful
links:
</p>
<div className='flex flex-wrap items-center justify-center gap-3'>
<Link
href='/'
className='inline-flex items-center gap-2 rounded-full border border-stroke bg-white px-6 py-3 font-satoshi font-medium text-black duration-200 ease-out hover:bg-gray'
>
<svg
className='fill-current'
width='21'
height='21'
viewBox='0 0 21 21'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M9.27544 4.63472C9.51952 4.8788 9.51952 5.27452 9.27544 5.5186L5.34238 9.45166H17.1668C17.512 9.45166 17.7918 9.73148 17.7918 10.0767C17.7918 10.4218 17.512 10.7017 17.1668 10.7017H5.34238L9.27544 14.6347C9.51952 14.8788 9.51952 15.2745 9.27544 15.5186C9.03136 15.7627 8.63563 15.7627 8.39155 15.5186L3.39155 10.5186C3.14748 10.2745 3.14748 9.8788 3.39155 9.63472L8.39155 4.63472C8.63563 4.39064 9.03136 4.39064 9.27544 4.63472Z'
/>
</svg>
Go back
</Link>
<Link
href='/'
className='inline-flex rounded-full bg-primary px-7 py-3 font-satoshi font-medium text-white hover:bg-primary-dark'
>
Take me home
</Link>
</div>
</div>
</div>
</div>
</section>
);
};
export default NotFound;
================================================
FILE: src/components/Blog/BlogItem.tsx
================================================
import React from "react";
import { Blog } from "@/types/blog";
import Image from "next/image";
import Link from "next/link";
const BlogItem = ({ blog }: { blog: Blog }) => {
return (
<article className="group overflow-hidden rounded-[15px] bg-white shadow-dropdown dark:bg-gray-dark">
<Link
href={`#`}
className="block overflow-hidden"
>
<Image
src={blog?.mainImage}
alt="blog"
className="w-full duration-300 ease-in group-hover:rotate-6 group-hover:scale-125"
width={500}
height={500}
/>
</Link>
<div className="px-6 py-7">
<div className="mb-3 flex flex-wrap items-center gap-6">
<Link
href={`#`}
className="flex items-center gap-2 font-satoshi text-sm font-medium -tracking-[0.1px] dark:text-gray-5"
>
<svg
className="fill-current"
width="18"
height="18"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M9.0001 0.9375C7.03259 0.9375 5.4376 2.53249 5.4376 4.5C5.4376 6.46751 7.03259 8.0625 9.0001 8.0625C10.9676 8.0625 12.5626 6.46751 12.5626 4.5C12.5626 2.53249 10.9676 0.9375 9.0001 0.9375ZM6.5626 4.5C6.5626 3.15381 7.65391 2.0625 9.0001 2.0625C10.3463 2.0625 11.4376 3.15381 11.4376 4.5C11.4376 5.84619 10.3463 6.9375 9.0001 6.9375C7.65391 6.9375 6.5626 5.84619 6.5626 4.5Z"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M9.0001 9.1875C7.26494 9.1875 5.66629 9.58191 4.48169 10.2483C3.31471 10.9047 2.4376 11.8995 2.4376 13.125L2.43755 13.2015C2.4367 14.0729 2.43564 15.1665 3.39491 15.9477C3.86701 16.3321 4.52746 16.6055 5.41976 16.7861C6.31455 16.9672 7.48077 17.0625 9.0001 17.0625C10.5194 17.0625 11.6857 16.9672 12.5804 16.7861C13.4727 16.6055 14.1332 16.3321 14.6053 15.9477C15.5646 15.1665 15.5635 14.0729 15.5626 13.2015L15.5626 13.125C15.5626 11.8995 14.6855 10.9047 13.5185 10.2483C12.3339 9.58191 10.7353 9.1875 9.0001 9.1875ZM3.5626 13.125C3.5626 12.4865 4.02863 11.7939 5.03323 11.2288C6.0202 10.6736 7.42156 10.3125 9.0001 10.3125C10.5786 10.3125 11.98 10.6736 12.967 11.2288C13.9716 11.7939 14.4376 12.4865 14.4376 13.125C14.4376 14.1059 14.4074 14.658 13.8949 15.0753C13.617 15.3016 13.1525 15.5225 12.3573 15.6835C11.5645 15.8439 10.4808 15.9375 9.0001 15.9375C7.51943 15.9375 6.43565 15.8439 5.64294 15.6835C4.84774 15.5225 4.38319 15.3016 4.10529 15.0753C3.59284 14.658 3.5626 14.1059 3.5626 13.125Z"
/>
</svg>
{blog?.author}
</Link>
<a
href={`#`}
className="flex items-center gap-2 font-satoshi text-sm font-medium -tracking-[0.1px] dark:text-gray-5"
>
<svg
className="fill-current"
width="18"
height="18"
viewBox="0 0 18 18"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path d="M12.75 10.5C13.1642 10.5 13.5 10.1642 13.5 9.75C13.5 9.33579 13.1642 9 12.75 9C12.3358 9 12 9.33579 12 9.75C12 10.1642 12.3358 10.5 12.75 10.5Z" />
<path d="M12.75 13.5C13.1642 13.5 13.5 13.1642 13.5 12.75C13.5 12.3358 13.1642 12 12.75 12C12.3358 12 12 12.3358 12 12.75C12 13.1642 12.3358 13.5 12.75 13.5Z" />
<path d="M9.75 9.75C9.75 10.1642 9.41421 10.5 9 10.5C8.58579 10.5 8.25 10.1642 8.25 9.75C8.25 9.33579 8.58579 9 9 9C9.41421 9 9.75 9.33579 9.75 9.75Z" />
<path d="M9.75 12.75C9.75 13.1642 9.41421 13.5 9 13.5C8.58579 13.5 8.25 13.1642 8.25 12.75C8.25 12.3358 8.58579 12 9 12C9.41421 12 9.75 12.3358 9.75 12.75Z" />
<path d="M5.25 10.5C5.66421 10.5 6 10.1642 6 9.75C6 9.33579 5.66421 9 5.25 9C4.83579 9 4.5 9.33579 4.5 9.75C4.5 10.1642 4.83579 10.5 5.25 10.5Z" />
<path d="M5.25 13.5C5.66421 13.5 6 13.1642 6 12.75C6 12.3358 5.66421 12 5.25 12C4.83579 12 4.5 12.3358 4.5 12.75C4.5 13.1642 4.83579 13.5 5.25 13.5Z" />
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.25 1.3125C5.56066 1.3125 5.8125 1.56434 5.8125 1.875V2.44704C6.309 2.43749 6.856 2.43749 7.45759 2.4375H10.5423C11.1439 2.43749 11.691 2.43749 12.1875 2.44704V1.875C12.1875 1.56434 12.4393 1.3125 12.75 1.3125C13.0607 1.3125 13.3125 1.56434 13.3125 1.875V2.49532C13.5075 2.51018 13.6921 2.52886 13.8668 2.55235C14.7461 2.67057 15.4578 2.91966 16.0191 3.48093C16.5803 4.0422 16.8294 4.75392 16.9476 5.63323C17.0625 6.48764 17.0625 7.57935 17.0625 8.95766V10.5423C17.0625 11.9206 17.0625 13.0124 16.9476 13.8668C16.8294 14.7461 16.5803 15.4578 16.0191 16.0191C15.4578 16.5803 14.7461 16.8294 13.8668 16.9476C13.0124 17.0625 11.9206 17.0625 10.5423 17.0625H7.45769C6.07939 17.0625 4.98764 17.0625 4.13323 16.9476C3.25392 16.8294 2.5422 16.5803 1.98093 16.0191C1.41966 15.4578 1.17057 14.7461 1.05235 13.8668C0.937479 13.0124 0.937488 11.9206 0.9375 10.5423V8.95769C0.937488 7.57937 0.937479 6.48764 1.05235 5.63323C1.17057 4.75392 1.41966 4.0422 1.98093 3.48093C2.5422 2.91966 3.25392 2.67057 4.13323 2.55235C4.30793 2.52886 4.49254 2.51018 4.6875 2.49532V1.875C4.6875 1.56434 4.93934 1.3125 5.25 1.3125ZM4.28314 3.66732C3.52857 3.76877 3.09383 3.95902 2.77643 4.27643C2.45902 4.59383 2.26877 5.02857 2.16732 5.78314C2.15014 5.91093 2.13577 6.04546 2.12376 6.1875H15.8762C15.8642 6.04546 15.8499 5.91093 15.8327 5.78314C15.7312 5.02857 15.541 4.59383 15.2236 4.27643C14.9062 3.95902 14.4714 3.76877 13.7169 3.66732C12.9461 3.56369 11.9301 3.5625 10.5 3.5625H7.5C6.06989 3.5625 5.05388 3.56369 4.28314 3.66732ZM2.0625 9C2.0625 8.35949 2.06274 7.80205 2.07231 7.3125H15.9277C15.9373 7.80205 15.9375 8.35949 15.9375 9V10.5C15.9375 11.9301 15.9363 12.9461 15.8327 13.7169C15.7312 14.4714 15.541 14.9062 15.2236 15.2236C14.9062 15.541 14.4714 15.7312 13.7169 15.8327C12.9461 15.9363 11.9301 15.9375 10.5 15.9375H7.5C6.06989 15.9375 5.05388 15.9363 4.28314 15.8327C3.52857 15.7312 3.09383 15.541 2.77643 15.2236C2.45902 14.9062 2.26877 14.4714 2.16732 13.7169C2.06369 12.9461 2.0625 11.9301 2.0625 10.5V9Z"
/>
</svg>
{new Date(blog?.publishedAt as string)
.toDateString()
.split(" ")
.slice(1)
.join(" ")}
</a>
</div>
<h3 className="mb-4 font-satoshi text-custom-2xl font-bold -tracking-[0.3px] text-black hover:text-primary dark:text-white">
<Link href={`#`}>
{blog?.title.substring(0, 40)}...
</Link>
</h3>
<p className="w-full max-w-[272px] dark:text-gray-5">
{blog?.metadata.substring(0, 60)}
</p>
</div>
</article>
);
};
export default BlogItem;
================================================
FILE: src/components/Common/Breadcrumb.tsx
================================================
import Link from "next/link";
export default function Breadcrumb({ pageTitle }: { pageTitle: string }) {
return (
<section className='relative z-10 overflow-x-clip pb-[70px] pt-[140px]'>
<div className='container mx-auto w-full max-w-[1170px]'>
<div className='text-center'>
<h2 className='mb-4.5 font-satoshi text-3xl font-bold tracking-[-1px] text-dark dark:text-white'>
{pageTitle}
</h2>
<ol className='flex items-center justify-center'>
<li>
<Link href='/' className='text-base text-body dark:text-gray-5'>
Home
</Link>
</li>
<li className='relative text-base text-body before:mx-2 before:inline-block before:px-2 before:content-["/"] dark:text-gray-5'>
{pageTitle}
</li>
</ol>
</div>
</div>
<div className='absolute -right-[125px] top-1/2 -z-10 aspect-square w-full max-w-[250px] -translate-y-1/2 rounded-full bg-[#3FB9FA] opacity-50 blur-[150px]'></div>
</section>
);
}
================================================
FILE: src/components/Common/Breadcrumbs.tsx
================================================
import Link from "next/link";
import React from "react";
const Breadcrumbs = ({ title, pages }: { title: string; pages: string[] }) => {
return (
<div className='pb-17.5 text-center'>
<h1 className='mb-4 font-satoshi text-3xl font-bold -tracking-[1px] text-black dark:text-white'>
{title}
</h1>
<ul className='flex items-center justify-center gap-2'>
<li>
<Link className='dark:text-gray-5' href='/'>
{pages[0]}
</Link>
</li>
{pages?.slice(1).map((page, index) => (
<li className='dark:text-gray-5' key={index}>
/ {page}
</li>
))}
</ul>
</div>
);
};
export default Breadcrumbs;
================================================
FILE: src/components/Common/PreLoader.tsx
================================================
"use client";
import { useEffect, useState } from "react";
const Loader = () => {
const [loading, setLoading] = useState<boolean>(true);
useEffect(() => {
setTimeout(() => setLoading(false), 1000);
}, []);
return (
<>
{loading && (
<div className="fixed left-0 top-0 z-999999 flex h-screen w-screen items-center justify-center bg-white">
<div className="h-16 w-16 animate-spin rounded-full border-4 border-solid border-primary border-t-transparent"></div>
</div>
)}
</>
);
};
export default Loader;
================================================
FILE: src/components/Common/SectionHeader.tsx
================================================
import React from "react";
const SectionHeader = ({
title,
description,
}: {
title: string;
description: string;
}) => {
return (
<div className='mx-auto mb-12.5 w-full max-w-[703px] px-4 text-center sm:px-8 lg:mb-17.5 xl:px-0'>
<h2 className='mb-4.5 font-satoshi text-3xl font-bold -tracking-[1.6px] text-black dark:text-white lg:text-heading-4 xl:text-heading-2'>
{title}
</h2>
<p className='mx-auto w-full max-w-[585px] dark:text-gray-4'>
{description}
</p>
</div>
);
};
export default SectionHeader;
================================================
FILE: src/components/Common/SectionTitleH2.tsx
================================================
type PropsType = {
title: string;
center?: boolean;
largePara?: boolean;
paragraph: string;
width?: string;
paraWidth?: string;
titleWidth?: string;
marginBottom?: string;
};
export default function SectionTitleH2(props: PropsType) {
const {
title,
center,
largePara,
paragraph,
width,
paraWidth,
titleWidth,
marginBottom = "70px",
} = props;
return (
<div
className={`${center ? "mx-auto text-center" : ""}`}
style={{ maxWidth: width, marginBottom: marginBottom }}
>
<h2
className={`mb-4.5 text-4xl font-black tracking-[-.5px] text-dark dark:text-white md:text-[44px]/[50px]`}
style={{ maxWidth: titleWidth }}
>
{title}
</h2>
<p
className={`${
largePara ? "text-base md:text-lg" : "text-base"
} text-body dark:text-gray-4 ${paraWidth && center ? "mx-auto" : ""}`}
style={{ maxWidth: paraWidth }}
>
{paragraph}
</p>
</div>
);
}
================================================
FILE: src/components/Footer/index.tsx
================================================
import React from "react";
import Image from "next/image";
const Footer = () => {
return (
<footer className='relative z-1 mt-auto overflow-hidden bg-black py-17.5 lg:py-22.5 xl:py-27.5'>
<div className='mx-auto max-w-[1170px] px-4 sm:px-8 xl:px-0'>
{/* <!-- footer menu start --> */}
<div className='flex flex-wrap gap-10 lg:justify-between xl:flex-nowrap xl:gap-20'>
<div className='w-full max-w-[275px]'>
<a href='index.html'>
<Image
src='/images/logo/logo-light.svg'
alt='Logo'
width={214}
height={40}
/>
</a>
<p className='mt-5 text-gray-5'>
© Your SaaS - Demo SaaS website created using SaaSBold
</p>
<ul className='mt-11 flex items-center gap-2'>
<li>
<a
href='#'
aria-label='Twitter Social Link'
className='flex duration-200 ease-out hover:text-white'
>
<svg
className='fill-current'
width='32'
height='32'
viewBox='0 0 32 32'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M13.063 9L16.558 13.475L20.601 9H23.055L17.696 14.931L24 23H19.062L15.196 18.107L10.771 23H8.316L14.051 16.658L8 9H13.063ZM12.323 10.347H10.866L19.741 21.579H21.101L12.323 10.347Z' />
</svg>
</a>
</li>
<li>
<a
href='#'
aria-label='Dev Social Link'
className='flex duration-200 ease-out hover:text-white'
>
<svg
className='fill-current'
width='32'
height='32'
viewBox='0 0 32 32'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M12.29 14.3C12.1722 14.2039 12.026 14.1494 11.874 14.145H11.251V17.872H11.874C12.0261 17.8674 12.1724 17.8125 12.29 17.716C12.3606 17.6615 12.4166 17.5905 12.4533 17.5093C12.4899 17.428 12.5059 17.3389 12.5 17.25V14.762C12.5049 14.6738 12.4884 14.5856 12.4518 14.5052C12.4152 14.4247 12.3597 14.3543 12.29 14.3ZM22.432 8H9.568C8.704 8 8.002 8.7 8 9.564V22.436C8.00106 22.8512 8.16673 23.249 8.46067 23.5422C8.75461 23.8354 9.15283 24 9.568 24H22.432C23.296 24 23.998 23.3 24 22.436V9.564C23.9989 9.14883 23.8333 8.75103 23.5393 8.45784C23.2454 8.16465 22.8472 8 22.432 8ZM13.507 17.257C13.5152 17.4842 13.4758 17.7106 13.3914 17.9216C13.307 18.1327 13.1794 18.3238 13.0168 18.4826C12.8542 18.6415 12.6601 18.7646 12.4471 18.844C12.2342 18.9235 12.0069 18.9575 11.78 18.944H10.123V13.035H11.815C12.0392 13.0265 12.2628 13.0643 12.4718 13.1461C12.6807 13.2279 12.8705 13.352 13.0293 13.5105C13.1882 13.669 13.3125 13.8586 13.3947 14.0674C13.4769 14.2762 13.5151 14.4998 13.507 14.724V17.257ZM17.1 14.09H15.2V15.462H16.363V16.519H15.2V17.89H17.1V18.946H14.883C14.7884 18.9487 14.6943 18.9327 14.6059 18.8989C14.5175 18.8652 14.4367 18.8144 14.3679 18.7493C14.2992 18.6843 14.244 18.6064 14.2054 18.5201C14.1668 18.4337 14.1456 18.3406 14.143 18.246V13.775C14.1382 13.5843 14.2091 13.3994 14.3403 13.2609C14.4715 13.1224 14.6523 13.0415 14.843 13.036H17.1V14.09ZM20.8 18.208C20.329 19.308 19.484 19.088 19.106 18.208L17.734 13.036H18.9L19.958 17.1L21.014 13.038H22.178L20.8 18.208Z' />
</svg>
</a>
</li>
<li>
<a
href='#'
aria-label='Github Social Link'
className='flex duration-200 ease-out hover:text-white'
>
<svg
className='fill-current'
width='32'
height='32'
viewBox='0 0 32 32'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M16 8.19995C11.6 8.19995 8 11.8 8 16.2C8 19.7 10.3 22.7 13.5 23.8C13.9 23.9 14 23.6 14 23.4V22C11.8 22.5 11.3 21 11.3 21C10.9 20.1 10.4 19.8 10.4 19.8C9.7 19.3 10.5 19.3 10.5 19.3C11.3 19.4 11.7 20.1 11.7 20.1C12.4 21.4 13.6 21 14 20.8C14.1 20.3 14.3 19.9 14.5 19.7C12.7 19.5 10.9 18.8 10.9 15.7C10.9 14.8 11.2 14.1 11.7 13.6C11.6 13.4 11.3 12.6 11.8 11.5C11.8 11.5 12.5 11.3 14 12.3C14.6 12.1 15.3 12 16 12C16.7 12 17.4 12.1 18 12.3C19.5 11.3 20.2 11.5 20.2 11.5C20.6 12.6 20.4 13.4 20.3 13.6C20.8 14.2 21.1 14.9 21.1 15.7C21.1 18.8 19.2 19.4 17.4 19.6C17.7 20 18 20.5 18 21.2V23.4C18 23.6 18.1 23.9 18.6 23.8C21.8 22.7 24.1 19.7 24.1 16.2C24 11.8 20.4 8.19995 16 8.19995Z' />
</svg>
</a>
</li>
</ul>
</div>
<div className='flex w-full flex-col justify-between gap-10 sm:w-auto sm:flex-row xl:gap-20'>
<div className='w-full sm:w-auto'>
<h2 className='mb-5 font-satoshi text-lg font-bold -tracking-[0.2px] text-white'>
Products
</h2>
<ul className='flex flex-col gap-3'>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Features
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Integrations
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Pricing & Plans
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Changelog
</a>
</li>
</ul>
</div>
<div className='w-full sm:w-auto'>
<h2 className='mb-5 font-satoshi text-lg font-bold -tracking-[0.2px] text-white'>
Resources
</h2>
<ul className='flex flex-col gap-3'>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Our Blog
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Heatmaps
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Affiliate Program
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Integrations
</a>
</li>
</ul>
</div>
<div className='w-full sm:w-auto'>
<h2 className='mb-5 font-satoshi text-lg font-bold -tracking-[0.2px] text-white'>
Products
</h2>
<ul className='flex flex-col gap-3'>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Features
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Integrations
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Pricing & Plans
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Changelog
</a>
</li>
</ul>
</div>
<div className='w-full sm:w-auto'>
<h2 className='mb-5 font-satoshi text-lg font-bold -tracking-[0.2px] text-white'>
Company
</h2>
<ul className='flex flex-col gap-3'>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
About Us
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Our Story
</a>
</li>
<li>
<a
className='text-gray-5 duration-200 ease-out hover:text-white'
href='#'
>
Work With Us
</a>
</li>
</ul>
</div>
</div>
</div>
{/* <!-- footer menu end --> */}
</div>
{/* <!-- bg shapes --> */}
<div className='hidden sm:block'>
<div className='absolute bottom-0 left-0 -z-1'>
<Image
src='/images/footer/footer-grid-01.svg'
alt='grid'
width={305}
height={305}
/>
</div>
<div className='absolute right-0 top-0 -z-1'>
<Image
src='/images/footer/footer-grid-02.svg'
alt='grid'
width={305}
height={305}
/>
</div>
</div>
</footer>
);
};
export default Footer;
================================================
FILE: src/components/Header/Dropdown.tsx
================================================
import { Menu } from "@/types/menu";
import Link from "next/link";
import { useState } from "react";
import { usePathname } from "next/navigation";
const Dropdown = ({
stickyMenu,
item,
}: {
stickyMenu: boolean;
item: Menu;
}) => {
const [dropdown, setDropdown] = useState(false);
const pathname = usePathname();
return (
<div className='group relative'>
<button
onClick={() => setDropdown(!dropdown)}
className='flex w-full items-center justify-between gap-1.5 rounded-full px-[14px] py-[3px] font-satoshi font-medium text-dark group-hover:bg-primary/5 group-hover:text-primary dark:text-gray-5 dark:group-hover:bg-white/5 dark:group-hover:text-white'
>
Pages
<svg
className='group-hover:rotate-180'
width='19'
height='18'
viewBox='0 0 19 18'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M4.29314 6.38394C4.49532 6.14807 4.85042 6.12075 5.0863 6.32293L9.97022 10.5092L14.8542 6.32293C15.09 6.12075 15.4451 6.14807 15.6473 6.38394C15.8495 6.61981 15.8222 6.97492 15.5863 7.17709L10.3363 11.6771C10.1256 11.8576 9.8148 11.8576 9.60415 11.6771L4.35415 7.17709C4.11828 6.97492 4.09097 6.61981 4.29314 6.38394Z'
fill='currentColor'
/>
</svg>
</button>
{/* <!-- Dropdown Start --> */}
<ul
className={`dropdown space-y-1.5 ${
stickyMenu ? "mt-2 lg:-mt-3" : "mt-2 lg:mt-0"
} ${dropdown && "flex"}`}
>
{item?.submenu &&
item?.submenu.map((item, i) => (
<li key={i}>
<Link
href={item?.path}
className={`flex rounded-[5px] px-4.5 py-[11px] text-dark duration-300 hover:bg-primary hover:text-white dark:text-gray-5 dark:hover:text-white ${
pathname === item?.path
? "bg-primary text-white dark:text-white"
: ""
}`}
>
{item?.title}
</Link>
</li>
))}
</ul>
{/* // <!-- Dropdown End --> */}
</div>
);
};
export default Dropdown;
================================================
FILE: src/components/Header/ThemeSwitcher.tsx
================================================
import { useTheme } from "next-themes";
export default function ThemeSwitcher() {
const { theme, setTheme } = useTheme();
return (
<button
onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
className='relative z-10 h-9 w-[36px] cursor-pointer items-center justify-between rounded-lg dark:bg-white/5'
>
<span className='hidden items-center justify-center text-dark dark:flex dark:text-white'>
<svg
width='20'
height='20'
viewBox='0 0 20 20'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M9.99996 1.04167C10.3451 1.04167 10.625 1.32149 10.625 1.66667V2.50001C10.625 2.84518 10.3451 3.12501 9.99996 3.12501C9.65478 3.12501 9.37496 2.84518 9.37496 2.50001V1.66667C9.37496 1.32149 9.65478 1.04167 9.99996 1.04167ZM3.66547 3.66551C3.90955 3.42144 4.30527 3.42144 4.54935 3.66551L4.87672 3.99288C5.12079 4.23696 5.12079 4.63268 4.87672 4.87676C4.63264 5.12084 4.23691 5.12084 3.99283 4.87676L3.66547 4.5494C3.42139 4.30532 3.42139 3.90959 3.66547 3.66551ZM16.3342 3.66573C16.5783 3.90981 16.5783 4.30554 16.3342 4.54961L16.0069 4.87698C15.7628 5.12106 15.3671 5.12105 15.123 4.87698C14.8789 4.6329 14.8789 4.23717 15.123 3.99309L15.4504 3.66573C15.6944 3.42165 16.0902 3.42165 16.3342 3.66573ZM9.99996 5.62501C7.58371 5.62501 5.62496 7.58376 5.62496 10C5.62496 12.4163 7.58371 14.375 9.99996 14.375C12.4162 14.375 14.375 12.4163 14.375 10C14.375 7.58376 12.4162 5.62501 9.99996 5.62501ZM4.37496 10C4.37496 6.8934 6.89336 4.37501 9.99996 4.37501C13.1066 4.37501 15.625 6.8934 15.625 10C15.625 13.1066 13.1066 15.625 9.99996 15.625C6.89336 15.625 4.37496 13.1066 4.37496 10ZM1.04163 10C1.04163 9.65483 1.32145 9.37501 1.66663 9.37501H2.49996C2.84514 9.37501 3.12496 9.65483 3.12496 10C3.12496 10.3452 2.84514 10.625 2.49996 10.625H1.66663C1.32145 10.625 1.04163 10.3452 1.04163 10ZM16.875 10C16.875 9.65483 17.1548 9.37501 17.5 9.37501H18.3333C18.6785 9.37501 18.9583 9.65483 18.9583 10C18.9583 10.3452 18.6785 10.625 18.3333 10.625H17.5C17.1548 10.625 16.875 10.3452 16.875 10ZM15.123 15.123C15.3671 14.879 15.7628 14.879 16.0069 15.123L16.3342 15.4504C16.5783 15.6945 16.5783 16.0902 16.3342 16.3343C16.0902 16.5784 15.6944 16.5784 15.4504 16.3343L15.123 16.0069C14.8789 15.7628 14.8789 15.3671 15.123 15.123ZM4.87672 15.1232C5.12079 15.3673 5.12079 15.7631 4.87672 16.0071L4.54935 16.3345C4.30527 16.5786 3.90955 16.5786 3.66547 16.3345C3.42139 16.0904 3.42139 15.6947 3.66547 15.4506L3.99283 15.1232C4.23691 14.8792 4.63264 14.8792 4.87672 15.1232ZM9.99996 16.875C10.3451 16.875 10.625 17.1548 10.625 17.5V18.3333C10.625 18.6785 10.3451 18.9583 9.99996 18.9583C9.65478 18.9583 9.37496 18.6785 9.37496 18.3333V17.5C9.37496 17.1548 9.65478 16.875 9.99996 16.875Z'
fill='currentColor'
/>
</svg>
</span>
<span className='flex items-center justify-center text-dark dark:hidden dark:text-white'>
<svg
width='20'
height='20'
viewBox='0 0 20 20'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M9.18112 2.33465C5.30889 2.74352 2.29163 6.0194 2.29163 10C2.29163 14.2572 5.74276 17.7083 9.99996 17.7083C13.9806 17.7083 17.2564 14.6911 17.6653 10.8188C16.5597 12.2224 14.8438 13.125 12.9166 13.125C9.57991 13.125 6.87496 10.4201 6.87496 7.08334C6.87496 5.15616 7.77759 3.44025 9.18112 2.33465ZM1.04163 10C1.04163 5.05245 5.05241 1.04167 9.99996 1.04167C10.5972 1.04167 10.8961 1.51772 10.9473 1.89689C10.9966 2.26165 10.8618 2.72555 10.4425 2.9789C9.05217 3.81901 8.12496 5.34319 8.12496 7.08334C8.12496 9.7297 10.2703 11.875 12.9166 11.875C14.6568 11.875 16.181 10.9478 17.0211 9.55748C17.2744 9.13821 17.7383 9.00337 18.1031 9.05264C18.4822 9.10384 18.9583 9.40281 18.9583 10C18.9583 14.9476 14.9475 18.9583 9.99996 18.9583C5.05241 18.9583 1.04163 14.9476 1.04163 10Z'
fill='currentColor'
/>
</svg>
</span>
</button>
);
}
================================================
FILE: src/components/Header/index.tsx
================================================
"use client";
import logoLight from "@/../public/images/logo/logo-light.svg";
import logo from "@/../public/images/logo/logo.svg";
import { Menu } from "@/types/menu";
import Image from "next/image";
import Link from "next/link";
import { useEffect, useState } from "react";
import Dropdown from "./Dropdown";
import ThemeSwitcher from "./ThemeSwitcher";
import { menuData } from "./menuData";
import { onScroll } from "@/libs/scrollActive";
import { usePathname } from "next/navigation";
const Header = () => {
const [stickyMenu, setStickyMenu] = useState(false);
const [searchModalOpen, setSearchModalOpen] = useState(false);
const pathUrl = usePathname();
const handleStickyMenu = () => {
if (window.scrollY > 0) {
setStickyMenu(true);
} else {
setStickyMenu(false);
}
};
// Navbar toggle
const [navbarOpen, setNavbarOpen] = useState(false);
const navbarToggleHandler = () => {
setNavbarOpen(!navbarOpen);
};
useEffect(() => {
if (window.location.pathname === "/") {
window.addEventListener("scroll", onScroll);
}
return () => {
window.removeEventListener("scroll", onScroll);
};
}, []);
useEffect(() => {
window.addEventListener("scroll", handleStickyMenu);
});
return (
<>
<header
className={`fixed left-0 top-0 z-999 w-full transition-all duration-300 ease-in-out ${
stickyMenu
? "bg-white py-4 shadow dark:bg-dark xl:py-0"
: "bg-transparent py-7 xl:py-0"
}`}
>
<div className="relative mx-auto max-w-[1170px] items-center justify-between px-4 sm:px-8 xl:flex xl:px-0">
<div className="flex w-full items-center justify-between xl:w-4/12">
<Link href="/">
<Image
src={logoLight}
alt="Logo"
className="hidden w-full dark:block"
/>
<Image src={logo} alt="Logo" className="w-full dark:hidden" />
</Link>
{/* <!-- Hamburger Toggle BTN --> */}
<button
onClick={navbarToggleHandler}
aria-label="button for menu toggle"
className="block xl:hidden"
>
<span className="relative block h-5.5 w-5.5 cursor-pointer">
<span className="du-block absolute right-0 h-full w-full">
<span
className={`relative left-0 top-0 my-1 block h-0.5 w-0 rounded-sm bg-black delay-[0] duration-200 ease-in-out dark:bg-white ${
!navbarOpen && "!w-full delay-300"
}`}
></span>
<span
className={`relative left-0 top-0 my-1 block h-0.5 w-0 rounded-sm bg-black delay-150 duration-200 ease-in-out dark:bg-white ${
!navbarOpen && "delay-400 !w-full"
}`}
></span>
<span
className={`relative left-0 top-0 my-1 block h-0.5 w-0 rounded-sm bg-black delay-200 duration-200 ease-in-out dark:bg-white ${
!navbarOpen && "!w-full delay-500"
}`}
></span>
</span>
<span className="du-block absolute right-0 h-full w-full rotate-45">
<span
className={`absolute left-2.5 top-0 block h-full w-0.5 rounded-sm bg-black delay-300 duration-200 ease-in-out dark:bg-white ${
!navbarOpen && "!h-0 delay-[0]"
}`}
></span>
<span
className={`delay-400 absolute left-0 top-2.5 block h-0.5 w-full rounded-sm bg-black duration-200 ease-in-out dark:bg-white ${
!navbarOpen && "dealy-200 !h-0"
}`}
></span>
</span>
</span>
</button>
</div>
<div
className={`invisible h-0 w-full items-center justify-between xl:visible xl:flex xl:h-auto xl:w-8/12 ${
navbarOpen &&
"!visible relative mt-4 !h-auto max-h-[400px] overflow-y-scroll rounded-md bg-white p-7.5 shadow-lg dark:bg-gray-dark"
}`}
>
<nav>
<ul className="flex flex-col gap-5 xl:flex-row xl:items-center xl:gap-2.5">
{menuData?.map((item: Menu, key) =>
!item?.path && item?.submenu ? (
<Dropdown stickyMenu={stickyMenu} item={item} key={key} />
) : (
<li
key={key}
className={`${
item?.submenu ? "group relative" : "nav__menu"
} ${stickyMenu ? "xl:py-4" : "xl:py-6"}`}
>
<Link
href={
item?.path
? item?.path.includes("#") && !item?.newTab
? `/${item?.path}`
: item?.path
: ""
}
target={item?.newTab ? "_blank" : ""}
rel={item?.newTab ? "noopener noreferrer" : ""}
className={`flex rounded-full px-[14px] py-[3px] font-satoshi font-medium ${
pathUrl === item?.path
? "bg-primary/5 text-primary dark:bg-white/5 dark:text-white"
: "text-black hover:bg-primary/5 hover:text-primary dark:text-gray-5 dark:hover:bg-white/5 dark:hover:text-white"
} ${item?.path?.startsWith("#") ? "menu-scroll" : ""}`}
>
{item?.title}
</Link>
</li>
)
)}
</ul>
</nav>
<div className="mt-7 flex flex-wrap items-center lg:mt-0">
<ThemeSwitcher />
<Link
href="#"
className="px-5 py-2 font-satoshi font-medium text-black dark:text-white"
>
Sign In
</Link>
<Link
href="#"
className="rounded-full bg-primary px-5 py-2 font-satoshi font-medium text-white hover:bg-primary-dark"
>
Sign Up
</Link>
</div>
{/* <!--=== Nav Right End ===--> */}
</div>
</div>
</header>
</>
);
};
export default Header;
================================================
FILE: src/components/Header/menuData.ts
================================================
import { Menu } from "@/types/menu";
export const menuData: Menu[] = [
{
id: 1,
title: "Features",
newTab: false,
path: "#features",
},
{
id: 2,
title: "Pricing",
newTab: false,
path: "#pricing",
},
{
id: 2,
title: "Blog",
newTab: false,
path: "#blog",
},
{
id: 4,
title: "Buy Now ↗",
newTab: true,
path: "https://saasbold.com/#pricing",
},
];
================================================
FILE: src/components/Home/Blog/index.tsx
================================================
import BlogItem from '@/components/Blog/BlogItem';
import SectionHeader from '@/components/Common/SectionHeader';
import type { Blog } from '@/types/blog';
const posts: Blog[] = [
{
_id: 1,
title:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod',
metadata:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam.',
mainImage: '/images/blog/blog-1.png',
author: 'John Doe',
publishedAt: '2022-01-01',
},
{
_id: 2,
title:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod',
metadata:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam.',
mainImage: '/images/blog/blog-2.png',
author: 'John Doe',
publishedAt: '2022-01-01',
},
{
_id: 3,
title:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod',
metadata:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam.',
mainImage: '/images/blog/blog-3.png',
author: 'John Doe',
publishedAt: '2022-01-01',
},
];
const Blog = async () => {
return (
<section
className="overflow-hidden py-17.5 lg:py-22.5 xl:py-27.5"
id="blog"
>
{/* <!-- section title --> */}
<SectionHeader
title={'Latest Blogs & News'}
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam."
/>
<div className="mx-auto w-full max-w-[1170px] px-4 sm:px-8 xl:px-0">
<div className="grid grid-cols-1 gap-7.5 sm:grid-cols-2 lg:grid-cols-3">
{/* <!-- blog item --> */}
{posts?.length > 0 ? (
posts
?.slice(0, 3)
.map((item, key: number) => <BlogItem blog={item} key={key} />)
) : (
<p>No posts found</p>
)}
</div>
</div>
</section>
);
};
export default Blog;
================================================
FILE: src/components/Home/CallToAction/index.tsx
================================================
import Image from "next/image";
import Link from "next/link";
const CallToAction = () => {
return (
<section className="relative z-1 overflow-hidden bg-primary py-17.5 lg:py-22.5 xl:py-25">
<div className="mx-auto w-full max-w-[585px] px-4 text-center sm:px-8 xl:px-0">
<h2 className="mb-5 font-satoshi text-3xl font-bold -tracking-[1.6px] text-white lg:text-heading-4 xl:text-heading-2">
Check Out The Demo
</h2>
<p className="text-gray-2">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent
condimentum dictum euismod malesuada lacus, non consequat quam.
</p>
<Link
href="#"
className="mt-7.5 inline-flex rounded-full bg-white px-7 py-3 font-satoshi font-medium -tracking-[0.2px] text-black hover:bg-white/90"
>
Try Live Demo
</Link>
</div>
{/* <!-- bg shapes --> */}
<div className="hidden sm:block">
<div className="absolute bottom-0 left-0 -z-1">
<Image
src="/images/cta/cta-grid-01.svg"
alt="grid"
width={376}
height={376}
/>
</div>
<div className="absolute right-0 top-0 -z-1">
<Image
src="/images/cta/cta-grid-02.svg"
alt="grid"
width={376}
height={376}
/>
</div>
<div className="absolute bottom-0 left-0 -z-1">
<Image
src="/images/cta/cta-shape-01.svg"
alt="grid"
width={1010}
height={404}
/>
</div>
<div className="absolute bottom-0 right-0 -z-1">
<Image
src="/images/cta/cta-shape-02.svg"
alt="grid"
width={935}
height={404}
/>
</div>
</div>
</section>
);
};
export default CallToAction;
================================================
FILE: src/components/Home/Counter/CountUp.tsx
================================================
// CountUp.tsx
import React, { useEffect, useState, useRef } from "react";
interface CountUpProps {
targetNumber: number;
}
const CountUp: React.FC<CountUpProps> = ({ targetNumber }) => {
const [count, setCount] = useState(0);
const countRef = useRef<HTMLSpanElement>(null);
const handleIntersection: IntersectionObserverCallback = (entries) => {
const entry = entries[0];
if (entry.isIntersecting) {
startCount();
}
};
const startCount = () => {
let startTime: number | undefined;
const duration = 1000; // You can adjust the duration
const animate = (time: number) => {
if (!startTime) startTime = time;
const progress = (time - startTime) / duration;
const currentCount = Math.ceil(progress * targetNumber);
// Ensure the currentCount does not exceed the targetNumber
setCount(currentCount > targetNumber ? targetNumber : currentCount);
if (progress < 1 && count < targetNumber) {
requestAnimationFrame(animate);
}
};
requestAnimationFrame(animate);
};
useEffect(() => {
const observer = new IntersectionObserver(handleIntersection);
if (countRef.current) {
observer.observe(countRef.current);
}
return () => {
observer.disconnect();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<span className='counter mr-4 inline-block' ref={countRef}>
{count}
</span>
);
};
export default CountUp;
================================================
FILE: src/components/Home/Counter/index.tsx
================================================
"use client";
import React from "react";
import CountUp from "./CountUp";
const Counter = () => {
return (
<section className='counter-section relative overflow-hidden pb-17.5 pt-17.5 lg:pb-22.5 xl:pb-27.5'>
<div className='absolute left-1/2 top-0 h-px w-full max-w-[1170px] -translate-x-1/2 bg-gradient-to-r from-[#D7D7D7]/0 via-[#D7D7D7] to-[#D7D7D7]/0 dark:from-slate-800 dark:via-slate-700 dark:to-slate-800'></div>
<div className='mx-auto w-full px-4 sm:px-8 xl:px-0'>
<h2 className='mb-12.5 text-center font-satoshi text-heading-5 font-bold -tracking-[1.2px] text-black dark:text-white'>
Numbers speaking for themselves
</h2>
<div className='flex flex-col items-center justify-center gap-7.5 sm:flex-row lg:gap-12.5 xl:gap-17.5'>
<div className='w-[250px] text-center '>
<h3 className='mb-2.5 font-satoshi text-heading-4 font-bold -tracking-[1.6px] text-primary lg:text-heading-2 xl:text-[55px] xl:leading-[1.05]'>
<CountUp targetNumber={20} />
<span className='-ml-3'>+</span>
</h3>
<p className='text-lg font-medium -tracking-[0.2px]'>
Integrations
</p>
</div>
{/* <!-- divider --> */}
<div className='h-px w-20 bg-stroke dark:bg-stroke-dark sm:h-20 sm:w-px'></div>
<div className='w-[250px] text-center'>
<h3 className='mb-2.5 font-satoshi text-heading-4 font-bold -tracking-[1.6px] text-primary lg:text-heading-2 xl:text-[55px] xl:leading-[1.05]'>
<CountUp targetNumber={100} />
<span className='-ml-3'>+</span>
</h3>
<p className='text-lg font-medium -tracking-[0.2px]'>
UI Components and Pages
</p>
</div>
{/* <!-- divider --> */}
<div className='h-px w-20 bg-stroke dark:bg-stroke-dark sm:h-20 sm:w-px'></div>
<div className='w-[250px] text-center'>
<h3 className='mb-2.5 font-satoshi text-heading-4 font-bold -tracking-[1.6px] text-primary lg:text-heading-2 xl:text-[55px] xl:leading-[1.05]'>
<CountUp targetNumber={12000} />
<span className='-ml-3'>+</span>
</h3>
<p className='text-lg font-medium -tracking-[0.2px]'>USD Saved</p>
</div>
</div>
</div>
</section>
);
};
export default Counter;
================================================
FILE: src/components/Home/FAQ/FaqItem.tsx
================================================
type PropsType = {
faq: {
id: number | string;
question: string;
answer: string;
};
handleFaqToggle: (id: number | string) => void;
activeFaq: number | string;
};
export default function FaqItem({
faq,
handleFaqToggle,
activeFaq,
}: PropsType) {
const { id, question, answer } = faq;
return (
<>
<div className='rounded-lg bg-white shadow-1 dark:bg-gray-dark'>
<button
onClick={() => {
handleFaqToggle(id);
}}
className={`text-medium flex w-full items-center justify-between px-6 py-4 text-left text-lg text-dark dark:text-white md:text-xl cursor-pointer`}
>
{question}
<span
className={`duration-300 ${activeFaq === id ? "rotate-180" : ""}`}
>
<svg
width='24'
height='25'
viewBox='0 0 24 25'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M4.43057 8.87618C4.70014 8.56168 5.17361 8.52526 5.48811 8.79483L12 14.3765L18.5119 8.79483C18.8264 8.52526 19.2999 8.56168 19.5695 8.87618C19.839 9.19067 19.8026 9.66415 19.4881 9.93371L12.4881 15.9337C12.2072 16.1745 11.7928 16.1745 11.5119 15.9337L4.51192 9.93371C4.19743 9.66415 4.161 9.19067 4.43057 8.87618Z'
fill='currentColor'
/>
</svg>
</span>
</button>
<div
className={`grid`}
style={{
gridTemplateRows: `${activeFaq === id ? "1fr" : "0fr"}`,
transition: "grid-template-rows 300ms",
}}
>
<div className={`overflow-hidden transition-all duration-300`}>
<p
className={`border-t border-stroke px-6 py-7 dark:border-stroke-dark`}
>
{answer}
</p>
</div>
</div>
</div>
</>
);
}
================================================
FILE: src/components/Home/FAQ/faqData.ts
================================================
import { Faq } from "@/types/faq";
const faqData: Faq[] = [
{
id: 1,
question: "Does this app offer a free trial period?",
answer:
"All individual Framer subscriptions have been grandfathered into a Pro plan at your existing rate. If you were on a Small Team plan, then all 5 seats have been converted over to Pro seats at your existing rate.",
},
{
id: 2,
question: "How much does the app cost?",
answer:
"All individual Framer subscriptions have been grandfathered into a Pro plan at your existing rate. If you were on a Small Team plan, then all 5 seats have been converted over to Pro seats at your existing rate.",
},
{
id: 3,
question: "What's the refund policy?",
answer:
"All individual Framer subscriptions have been grandfathered into a Pro plan at your existing rate. If you were on a Small Team plan, then all 5 seats have been converted over to Pro seats at your existing rate.",
},
];
export default faqData;
================================================
FILE: src/components/Home/FAQ/index.tsx
================================================
"use client";
import React, { useState } from "react";
import faqData from "./faqData";
import FaqItem from "./FaqItem";
import SectionHeader from "@/components/Common/SectionHeader";
const FAQ = () => {
const [activeFaq, setActiveFaq] = useState<number | string>(1);
const handleFaqToggle = (id: number | string) => {
activeFaq === id ? setActiveFaq(0) : setActiveFaq(id);
};
return (
<section className='overflow-hidden bg-gray-1 py-17.5 dark:bg-black lg:py-22.5 xl:py-27.5'>
{/* <!-- section title --> */}
<SectionHeader
title={"Frequently Ask Questionss"}
description='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam.'
/>
<div className='mx-auto w-full max-w-[662px] px-4 sm:px-8 xl:px-0'>
<div className='flex flex-col gap-4 '>
{/* <!-- Accordion Item --> */}
{faqData?.map((faq, key) => (
<FaqItem
key={key}
faq={faq}
handleFaqToggle={handleFaqToggle}
activeFaq={activeFaq}
/>
))}
</div>
</div>
</section>
);
};
export default FAQ;
================================================
FILE: src/components/Home/Features/FeatureItem.tsx
================================================
import type { FeatureItem } from '@/types/featureItem';
import Image from 'next/image';
const FeatureItem = ({ data }: { data: FeatureItem }) => {
return (
<div className="rounded-[15px] bg-white p-[35px] shadow-1 hover:shadow-features dark:bg-gray-dark">
<Image src={data.icon} alt={data?.title} width={40} height={40} />
<h3 className="mb-4.5 mt-7.5 font-satoshi text-2xl font-bold text-dark dark:text-white">
{data.title}
</h3>
<p className="dark:text-gray-5">{data.description}</p>
</div>
);
};
export default FeatureItem;
================================================
FILE: src/components/Home/Features/featuresData.ts
================================================
// import { FeatureItem } from "@/types/featureItem";
// const featuresData: FeatureItem[] = [
// {
// title: "Intuitive",
// description:
// "Our landing page template works on all devices, so you only have to add your content and images. It's easy to preview.",
// icon: "/images/features/features-icon-01.svg",
// id: 0,
// },
// {
// title: "Intuitive",
// description:
// "Our landing page template works on all devices, so you only have to add your content and images. It's easy to preview.",
// icon: "/images/features/features-icon-01.svg",
// id: 0,
// },
// {
// title: "Intuitive",
// description:
// "Our landing page template works on all devices, so you only have to add your content and images. It's easy to preview.",
// icon: "/images/features/features-icon-01.svg",
// id: 0,
// },
// {
// title: "Intuitive",
// description:
// "Our landing page template works on all devices, so you only have to add your content and images. It's easy to preview.",
// icon: "/images/features/features-icon-01.svg",
// id: 0,
// },
// {
// title: "Intuitive",
// description:
// "Our landing page template works on all devices, so you only have to add your content and images. It's easy to preview.",
// id: 0,
// },
// ];
// icon: "/images/features/features-icon-01.svg",
// export default featuresData;
import { FeatureItem } from "@/types/featureItem";
const featuresData: FeatureItem[] = [
{
id: 1,
title: "Ready-to-Use Integrations",
description:
"Database (Postgres with Prisma ORM), Auth (NextAuth), Payments (Stripe), Sanity (Blog), MailChimp (Newsletter), OpenAI, Email, and Many More",
icon: "/images/features/features-icon-01.svg",
},
{
id: 2,
title: "Cutting-edge Technologies",
description:
"Built-with cutting-edge technologies to provide a robust foundation for your SaaS product, giving you a competitive edge in the digital market.",
icon: "/images/features/features-icon-02.svg",
},
{
id: 3,
title: "High-quality Design",
description:
"Every single component and page is designed with attention to detail on Figma and styled with Tailwind CSS for the Next.js front-end.",
icon: "/images/features/features-icon-03.svg",
},
{
id: 4,
title: "Admin and User Dashboard",
description:
"Allows you to easily manage your SaaS operations and enables end-users to easily manage and modify their account settings with ease.",
icon: "/images/features/features-icon-04.svg",
},
{
id: 5,
title: "Fully Customizable",
description:
"SaaSBold provides the flexibility to customize your software's design and functionality to meet your specific business requirements and branding. Everything is highly customizable and modular.",
icon: "/images/features/features-icon-05.svg",
},
{
id: 6,
title: "Rich Docs and Email Support",
description:
"Docs includes detailed, step-by-step guide for every part of SaaSBold. If you need further assistance, simply open a support ticket and we will respond promptly.",
icon: "/images/features/features-icon-06.svg",
},
];
export default featuresData;
================================================
FILE: src/components/Home/Features/index.tsx
================================================
import React from "react";
import featuresData from "./featuresData";
import FeatureItem from "./FeatureItem";
import SectionHeader from "@/components/Common/SectionHeader";
import Image from "next/image";
const Features = () => {
return (
<section
id='features'
className='relative z-1 overflow-hidden bg-gray-1 py-17.5 dark:bg-black dark:text-white lg:py-22.5 xl:py-27.5'
>
{/* <!-- section title --> */}
<SectionHeader
title={"Launch SaaS Startup in Days"}
description='Everything you need to build, launch, and scale your SaaS startup.'
/>
<div className='relative z-1 mx-auto w-full max-w-[1170px] px-4 sm:px-8 xl:px-0'>
<div className='grid grid-cols-1 gap-7.5 sm:grid-cols-2 lg:grid-cols-3'>
{/* <!-- features item --> */}
{featuresData?.map((item: FeatureItem, key: number) => (
<FeatureItem data={item} key={key} />
))}
</div>
{/* <!-- Features Bg Shapes --> */}
<div className='hidden sm:block'>
<div className='absolute left-0 top-1/2 -z-1 -translate-y-1/2'>
<Image
src='/images/features/features-shape-01.svg'
alt='shape'
width={600}
height={600}
/>
</div>
<div className='absolute right-0 top-1/2 -z-1 -translate-y-1/2'>
<Image
src='/images/features/features-shape-02.svg'
alt='shape'
width={800}
height={800}
/>
</div>
</div>
</div>
</section>
);
};
export default Features;
================================================
FILE: src/components/Home/FeaturesWithImage/FeatureItem.tsx
================================================
import { FeatureWithImg } from "@/types/featureWithImg";
import Image from "next/image";
import React from "react";
const FeatureItem = ({ data }: { data: FeatureWithImg }) => {
return (
<div
className={`flex flex-col items-center justify-between gap-10 ${
data?.id % 2 === 0
? "pt-17.5 sm:flex-row-reverse lg:pt-22.5 xl:pt-27.5"
: "sm:flex-row"
}`}
>
<div className='w-full max-w-[475px]'>
<h3 className='mb-4.5 font-satoshi text-2xl font-bold text-black dark:text-white lg:text-3xl xl:text-heading-4'>
{data?.title}
</h3>
<p className='dark:text-gray-5'>{data?.description}</p>
<ul className='mt-7.5 flex flex-col gap-3'>
{data?.checklist?.map((list, key) => (
<li key={key} className='flex items-center gap-3'>
<span>
<svg
width='22'
height='22'
viewBox='0 0 22 22'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M20.1668 10.9999C20.1668 16.0625 16.0628 20.1666 11.0002 20.1666C5.93755 20.1666 1.8335 16.0625 1.8335 10.9999C1.8335 5.93731 5.93755 1.83325 11.0002 1.83325C16.0628 1.83325 20.1668 5.93731 20.1668 10.9999ZM14.6946 8.22212C14.9631 8.4906 14.9631 8.9259 14.6946 9.19439L10.1113 13.7777C9.84281 14.0462 9.40751 14.0462 9.13903 13.7777L7.30569 11.9444C7.03721 11.6759 7.03721 11.2406 7.30569 10.9721C7.57418 10.7036 8.00948 10.7036 8.27797 10.9721L9.62516 12.3193L11.6738 10.2707L13.7224 8.22212C13.9908 7.95363 14.4261 7.95363 14.6946 8.22212Z'
fill='#573CFF'
/>
</svg>
</span>
{list}
</li>
))}
</ul>
</div>
<div className='w-full max-w-[484px]'>
<Image src={data?.image} alt={data?.title} width={484} height={400} />
</div>
</div>
);
};
export default FeatureItem;
================================================
FILE: src/components/Home/FeaturesWithImage/featuresData.ts
================================================
import { FeatureWithImg } from "@/types/featureWithImg";
const featureItemData: FeatureWithImg[] = [
{
title: "Build, Launch, Scale with SaaSBold",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit praesent condimentum malesuada consequat quam.",
checklist: [
"Lorem ipsum dolor sit amet, consectetur.",
"malesuada consequat quam.",
"Nam posuere enim nec ante venenatis, et ullam",
],
image: "/images/features/features-01.svg",
id: 1,
},
{
title: "The Best SaaS Boilerplate Available on The Web",
description:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit praesent condimentum malesuada consequat quam.",
checklist: [
"Lorem ipsum dolor sit amet, consectetur.",
"malesuada consequat quam.",
"Nam posuere enim nec ante venenatis, et ullam",
],
image: "/images/features/features-02.svg",
id: 2,
},
];
export default featureItemData;
================================================
FILE: src/components/Home/FeaturesWithImage/index.tsx
================================================
import { FeatureWithImg } from "@/types/featureWithImg";
import featureItemData from "./featuresData";
import FeatureItem from "./FeatureItem";
import SectionHeader from "@/components/Common/SectionHeader";
const FeaturesWithImage = () => {
return (
<section className='overflow-hidden py-17.5 lg:py-22.5 xl:py-27.5'>
{/* <!-- section title --> */}
<SectionHeader
title={"Stand Out, Launch Fast!"}
description='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent condimentum dictum euismod malesuada lacus, non consequat quam'
/>
<div className='mx-auto w-full max-w-[1040px] px-4 sm:px-8 xl:px-0'>
{featureItemData?.map((item: FeatureWithImg, key: number) => (
<FeatureItem data={item} key={key} />
))}
</div>
</section>
);
};
export default FeaturesWithImage;
================================================
FILE: src/components/Home/Hero/Brand.tsx
================================================
================================================
FILE: src/components/Home/Hero/brandData.tsx
================================================
import type { JSX } from "react";
type Brand = {
id: number;
name: string;
link: string;
image: JSX.Element;
};
const i = 1;
const brandData: Brand[] = [
{
id: 1 + i,
name: "NextJSTemplates",
link: "https://nextjstemplates.com",
image: (
<svg
width='101'
height='28'
viewBox='0 0 101 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
d='M87.327 15.8857C87.327 15.4867 87.674 15.1571 88.073 15.1571C88.472 15.1571 88.8016 15.4867 88.8016 15.8857C88.8016 16.2847 88.4547 16.6143 88.073 16.6143C87.6913 16.6143 87.327 16.2847 87.327 15.8857Z'
fill='currentColor'
/>
<path
d='M89.8252 14.0294H90.814V14.3937C90.814 15.1224 91.213 15.6602 92.0457 15.6602C92.8784 15.6602 93.2601 15.1397 93.2601 14.359V8.98109H94.2663V14.3937C94.2663 15.7469 93.3642 16.5796 92.0284 16.5796C90.6058 16.5796 89.8078 15.6775 89.8078 14.3764V14.0121L89.8252 14.0294Z'
fill='currentColor'
/>
<path
d='M98.1003 8.87701C99.5228 8.87701 100.442 9.67502 100.529 10.9761H99.5055C99.4534 10.2302 98.933 9.79646 98.0829 9.79646C97.1461 9.79646 96.5389 10.2649 96.5389 11.0108C96.5389 11.618 96.8859 11.965 97.5798 12.1385L98.8115 12.4334C100.026 12.711 100.65 13.3702 100.65 14.4284C100.65 15.7816 99.6096 16.6317 98.0135 16.6317C96.4175 16.6317 95.4807 15.8336 95.4113 14.5499H96.4522C96.4695 15.2611 97.0767 15.7122 98.0135 15.7122C99.0024 15.7122 99.6443 15.2438 99.6443 14.4978C99.6443 13.908 99.332 13.5437 98.6034 13.3702L97.3716 13.0926C96.1573 12.815 95.5154 12.1038 95.5154 11.0282C95.5154 9.74442 96.5563 8.87701 98.1003 8.87701Z'
fill='currentColor'
/>
<path
d='M47.5839 1.39989V12.1731L40.4538 1.39989H37.8168V16.6143H40.4364V5.82368L47.5839 16.6143H50.2034V1.39989H47.5839Z'
fill='currentColor'
/>
<path
d='M61.6186 1.39989V3.84598H54.8354V7.76668H60.9073V10.1087H54.8354V14.1508H61.6186V16.6143H52.1638V1.39989H61.6186Z'
fill='currentColor'
/>
<path
d='M78.6545 1.39989L76.9891 3.84598H81.8119V16.6143H84.4835V3.84598H87.8837L89.5318 1.39989H78.6545Z'
fill='currentColor'
/>
<path
d='M67.3261 10.6117L68.9568 13.0058L66.4934 16.6142H63.2493L67.3261 10.6117Z'
fill='currentColor'
/>
<path
d='M76.885 16.6142H73.6235L70.0671 11.3751L68.4364 8.98101L63.284 1.39985H66.5281L70.0671 6.58696L73.5888 1.39985H76.8329L73.398 6.44818L71.6805 8.98101L76.885 16.6142Z'
fill='currentColor'
/>
<path
d='M37.8168 18.6348H42.3621V19.2246H40.4017V24.9669H39.7598V19.2246H37.8168V18.6348Z'
fill='currentColor'
/>
<path
d='M42.1539 22.8157C42.1539 21.4799 42.9866 20.5604 44.2183 20.5604C45.45 20.5604 46.1613 21.3758 46.1613 22.5902V22.8851H42.7437C42.7958 23.926 43.3336 24.5332 44.253 24.5332C44.9469 24.5332 45.398 24.2382 45.5715 23.6657H46.1613C45.9358 24.5679 45.2592 25.0536 44.253 25.0536C42.9866 25.0536 42.1539 24.1515 42.1539 22.8157ZM42.7611 22.4514H45.5541C45.5541 21.636 45.0163 21.0809 44.2183 21.0809C43.4203 21.0809 42.8825 21.6187 42.7784 22.4514H42.7611Z'
fill='currentColor'
/>
<path
d='M47.1328 24.9669V20.6819H47.6706L47.74 21.289C47.9482 20.838 48.4339 20.5604 49.0411 20.5604C49.7177 20.5604 50.2208 20.9074 50.429 21.4799C50.6198 20.9247 51.1402 20.5604 51.8342 20.5604C52.771 20.5604 53.3782 21.1676 53.3782 22.1564V24.9669H52.7883V22.2952C52.7883 21.5666 52.372 21.1329 51.7301 21.1329C51.0188 21.1329 50.5851 21.6707 50.5851 22.3299V24.9669H49.9779V22.2779C49.9779 21.5493 49.5616 21.1329 48.9197 21.1329C48.2084 21.1329 47.7747 21.6707 47.7747 22.3126V24.9669H47.1328Z'
fill='currentColor'
/>
<path
d='M54.5925 20.6819H55.1303L55.1997 21.5493C55.4946 20.89 56.1018 20.5604 56.8304 20.5604C58.0795 20.5604 58.8081 21.5146 58.8081 22.7983C58.8081 24.0821 58.0969 25.0536 56.8304 25.0536C56.1018 25.0536 55.5293 24.7413 55.2344 24.1168V26.8058H54.6272V20.6645L54.5925 20.6819ZM56.709 24.5158C57.6458 24.5158 58.1836 23.8045 58.1836 22.8157C58.1836 21.8268 57.6458 21.1156 56.709 21.1156C55.7722 21.1156 55.2171 21.8268 55.2171 22.8157C55.2171 23.8045 55.7722 24.5158 56.709 24.5158Z'
fill='currentColor'
/>
<path
d='M59.797 24.9669V18.947L60.4042 18.5133V24.9495H59.797V24.9669Z'
fill='currentColor'
/>
<path
d='M61.4798 23.8045C61.4798 23.0239 62.087 22.5208 63.0932 22.4514L64.5157 22.3299V22.1911C64.5157 21.3584 64.0126 21.0809 63.3881 21.0809C62.6421 21.0809 62.2084 21.4105 62.2084 22.0003H61.6533C61.6533 21.1329 62.3645 20.5778 63.4228 20.5778C64.4116 20.5778 65.1402 21.0809 65.1402 22.2085V24.9669H64.6198L64.5331 24.2209C64.2728 24.7587 63.683 25.0883 62.9544 25.0883C62.0349 25.0883 61.4971 24.5678 61.4971 23.8219L61.4798 23.8045ZM64.4984 23.0239V22.7983L63.2319 22.9024C62.4166 22.9718 62.1043 23.3188 62.1043 23.8045C62.1043 24.325 62.486 24.5852 63.0758 24.5852C63.9779 24.5852 64.4984 23.9607 64.4984 23.0239Z'
fill='currentColor'
/>
<path
d='M66.6322 24.9669V21.2023H65.7648V20.6819H66.6322V19.745L67.2394 19.3287V20.6819H68.1068V21.2023H67.2394V24.9669H66.6322Z'
fill='currentColor'
/>
<path
d='M68.5405 22.8157C68.5405 21.4799 69.3732 20.5604 70.6049 20.5604C71.8366 20.5604 72.5479 21.3758 72.5479 22.5902V22.8851H69.1303C69.1824 23.926 69.7202 24.5332 70.6396 24.5332C71.3335 24.5332 71.7846 24.2382 71.9581 23.6657H72.5479C72.3224 24.5679 71.6458 25.0536 70.6396 25.0536C69.3732 25.0536 68.5405 24.1515 68.5405 22.8157ZM69.1477 22.4514H71.9407C71.9407 21.636 71.4029 21.0809 70.6049 21.0809C69.8069 21.0809 69.2691 21.6187 69.165 22.4514H69.1477Z'
fill='currentColor'
/>
<path
d='M73.745 23.7525C73.745 24.2556 74.1093 24.5505 74.7165 24.5505C75.3757 24.5505 75.7747 24.2729 75.7747 23.8045C75.7747 23.4576 75.6012 23.2494 75.0981 23.128L74.3695 22.9371C73.6235 22.7463 73.2592 22.3646 73.2592 21.7748C73.2592 21.0288 73.8837 20.5431 74.8032 20.5431C75.7227 20.5431 76.2951 21.0462 76.3125 21.8268H75.7226C75.7226 21.3237 75.3583 21.0462 74.7858 21.0462C74.2134 21.0462 73.849 21.3064 73.849 21.7574C73.849 22.0871 74.0746 22.3126 74.543 22.434L75.2716 22.6249C76.0176 22.8157 76.3472 23.1626 76.3472 23.7698C76.3472 24.5332 75.6879 25.0363 74.7165 25.0363C73.745 25.0363 73.1551 24.5158 73.1551 23.7351H73.745V23.7525Z'
fill='currentColor'
/>
<path
d='M99.9079 22.9154H79.4023L80.183 22.0133H100.671L99.9079 22.9154Z'
fill='currentColor'
/>
<path
d='M28.0173 13.9827C28.0173 15.9083 27.6357 17.7472 26.9417 19.3953C24.8253 24.461 19.8463 28 14.0173 28C6.28005 28 0 21.7373 0 14C0 6.2627 6.28005 0 14.0173 0C18.5105 0 22.518 2.11648 25.0855 5.41264H13.7571L15.7348 8.37918H18.2676V17.5737L15.4399 13.2887L10.2181 5.41264H7.2342V22.4H10.2007V10.4089L18.2676 22.5874H21.2168V8.37918H26.855C27.601 10.0967 28.0173 11.9876 28.0173 13.9827Z'
fill='currentColor'
/>
</svg>
),
},
{
id: 1 + i,
name: "FormBold",
link: "https://formbold.com",
image: (
<svg
width='153'
height='28'
viewBox='0 0 153 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
d='M28 0V28H10.8031V22.3096H22.6864V16.7699H10.8031V11.3055H22.6864V5.84118H5.38896V28H0V0H28Z'
fill='currentColor'
/>
<path
d='M51.4835 15.6629V12.6489H44.3547V7.43334H52.8463V4.34071H41V23.4993H44.3547V15.6629H51.4835Z'
fill='currentColor'
/>
<path
d='M53.2473 16.9995C53.2473 21.0357 56.1564 23.8138 60.1664 23.8138C64.1763 23.8138 67.0855 21.0357 67.0855 16.9995C67.0855 12.9634 64.1763 10.1853 60.1664 10.1853C56.1564 10.1853 53.2473 12.9634 53.2473 16.9995ZM56.4447 16.9995C56.4447 14.6407 57.9648 13.042 60.1664 13.042C62.3679 13.042 63.888 14.6407 63.888 16.9995C63.888 19.3583 62.3679 20.957 60.1664 20.957C57.9648 20.957 56.4447 19.3583 56.4447 16.9995Z'
fill='currentColor'
/>
<path
d='M77.3515 10.4998C76.8273 10.3687 76.3818 10.3163 75.9362 10.3163C74.2064 10.3163 72.9746 11.1812 72.4243 12.4654L72.2408 10.5784H69.2268V23.4993H72.4243V17.2092C72.4243 14.6932 73.8657 13.4613 76.1721 13.4613H77.3515V10.4998Z'
fill='currentColor'
/>
<path
d='M82.3201 23.4993V16.1608C82.3201 14.0641 83.5519 13.0682 85.072 13.0682C86.5921 13.0682 87.5618 14.0379 87.5618 15.8463V23.4993H90.7593V16.1608C90.7593 14.0379 91.9387 13.042 93.485 13.042C95.0051 13.042 96.001 14.0117 96.001 15.8725V23.4993H99.1723V15.0339C99.1723 12.0461 97.4425 10.159 94.2975 10.159C92.3318 10.159 90.8117 11.1288 90.1565 12.6227C89.4751 11.1288 88.1122 10.159 86.1466 10.159C84.2857 10.159 82.9753 10.9977 82.3201 12.0723L82.058 10.5522H79.1226V23.4993H82.3201Z'
fill='currentColor'
/>
<path
d='M102.39 23.4993H110.148C114.105 23.4993 116.385 21.5861 116.385 18.31C116.385 16.0822 115.363 14.5621 113.345 13.9069C115.153 13.1468 116.097 11.6267 116.097 9.50383C116.097 6.30637 113.791 4.34071 110.017 4.34071H102.39V23.4993ZM109.728 7.3023C111.615 7.3023 112.664 8.19339 112.664 9.84454C112.664 11.5481 111.642 12.5178 109.807 12.5178H105.745V7.3023H109.728ZM110.017 15.3484C111.877 15.3484 112.952 16.2657 112.952 17.8906C112.952 19.6204 111.904 20.5377 110.017 20.5377H105.745V15.3484H110.017Z'
fill='currentColor'
/>
<path
d='M117.836 16.9995C117.836 21.0357 120.746 23.8138 124.755 23.8138C128.765 23.8138 131.675 21.0357 131.675 16.9995C131.675 12.9634 128.765 10.1853 124.755 10.1853C120.746 10.1853 117.836 12.9634 117.836 16.9995ZM121.034 16.9995C121.034 14.6407 122.554 13.042 124.755 13.042C126.957 13.042 128.477 14.6407 128.477 16.9995C128.477 19.3583 126.957 20.957 124.755 20.957C122.554 20.957 121.034 19.3583 121.034 16.9995Z'
fill='currentColor'
/>
<path
d='M137.04 23.4993V4H133.868V23.4993H137.04Z'
fill='currentColor'
/>
<path
d='M145.321 23.84C147.287 23.84 148.964 22.9751 149.75 21.4812L149.96 23.4993H152.895V4H149.724V12.2033C148.912 10.9191 147.313 10.159 145.504 10.159C141.599 10.159 139.241 13.042 139.241 17.0782C139.241 21.0881 141.573 23.84 145.321 23.84ZM146.029 20.9046C143.801 20.9046 142.438 19.2797 142.438 16.9733C142.438 14.6669 143.801 13.0158 146.029 13.0158C148.256 13.0158 149.698 14.6407 149.698 16.9733C149.698 19.3059 148.256 20.9046 146.029 20.9046Z'
fill='currentColor'
/>
</svg>
),
},
{
id: 1 + i,
name: "Lineicons",
link: "https://lineicons.com",
image: (
<svg
width='173'
height='28'
viewBox='0 0 173 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<g clipPath='url(#clip0_2911_30)'>
<path
d='M41.0808 2.1517H37.0198V25.3354H50.7918V21.595H41.0808V2.1517Z'
fill='currentColor'
/>
<path
d='M55.4514 6.52626C56.7196 6.52626 57.7669 5.47893 57.7669 4.17511C57.7669 2.87129 56.7196 1.86671 55.4514 1.86671C54.1191 1.86671 53.0718 2.88554 53.0718 4.18224C53.0718 5.47893 54.1262 6.52626 55.4514 6.52626ZM53.5278 25.3354H57.3965V9.66112H53.5278V25.3354Z'
fill='currentColor'
/>
<path
d='M65.262 25.3354V16.8998C65.262 14.3634 66.7154 12.7105 69.1022 12.7105C71.1043 12.7105 72.4009 13.9787 72.4009 16.6148V25.3425H76.2697V15.6886C76.2697 11.6275 74.2391 9.19089 70.3063 9.19089C68.1831 9.19089 66.2808 10.11 65.2976 11.6988L64.977 9.66824H61.3933V25.3425H65.262V25.3354Z'
fill='currentColor'
/>
<path
d='M87.0848 25.7486C91.1744 25.7486 94.0314 23.6896 94.694 20.2555H91.1103C90.6614 21.7446 89.2721 22.571 87.1418 22.571C84.5698 22.571 83.1164 21.1746 82.8314 18.4173L94.6299 18.3817V17.2133C94.6299 12.3257 91.6446 9.18376 86.9495 9.18376C82.3541 9.18376 79.1479 12.5751 79.1479 17.4983C79.1479 22.3502 82.4182 25.7486 87.0848 25.7486ZM86.9851 12.3614C89.3006 12.3614 90.7897 13.7863 90.7897 15.9451H82.924C83.3016 13.6011 84.6981 12.3614 86.9851 12.3614Z'
fill='currentColor'
/>
<path
d='M99.6599 6.52626C100.928 6.52626 101.975 5.47893 101.975 4.17511C101.975 2.87129 100.928 1.86671 99.6599 1.86671C98.3276 1.86671 97.2874 2.88554 97.2874 4.18224C97.2874 5.47893 98.3204 6.52626 99.6599 6.52626ZM97.722 25.3354H101.591V9.66112H97.722V25.3354Z'
fill='currentColor'
/>
<path
d='M104.676 17.4698C104.676 22.4499 107.782 25.7486 112.541 25.7486C116.631 25.7486 119.68 23.2408 120.151 19.5929H116.246C115.833 21.31 114.472 22.2576 112.534 22.2576C110.062 22.2576 108.537 20.4194 108.537 17.4698C108.537 14.5201 110.19 12.6464 112.663 12.6464C114.501 12.6464 115.805 13.5654 116.246 15.3466H120.115C119.702 11.5705 116.781 9.19089 112.506 9.19089C107.882 9.19089 104.676 12.6179 104.676 17.4698Z'
fill='currentColor'
/>
<path
d='M122.11 17.4698C122.11 22.3573 125.629 25.7202 130.488 25.7202C135.34 25.7202 138.867 22.3644 138.867 17.4698C138.867 12.5822 135.348 9.21939 130.488 9.21939C125.637 9.22652 122.11 12.5822 122.11 17.4698ZM125.986 17.4698C125.986 14.6128 127.824 12.682 130.488 12.682C133.153 12.682 134.991 14.6199 134.991 17.4698C134.991 20.3196 133.153 22.2576 130.488 22.2576C127.824 22.2647 125.986 20.3268 125.986 17.4698Z'
fill='currentColor'
/>
<path
d='M145.792 25.3354V16.8998C145.792 14.3634 147.246 12.7105 149.632 12.7105C151.635 12.7105 152.931 13.9787 152.931 16.6148V25.3425H156.8V15.6886C156.8 11.6275 154.769 9.19089 150.837 9.19089C148.713 9.19089 146.811 10.11 145.828 11.6988L145.507 9.66824H141.924V25.3425H145.792V25.3354Z'
fill='currentColor'
/>
<path
d='M172.154 20.6118C172.154 23.7822 169.46 25.7558 165.592 25.7558C161.687 25.7558 159.222 23.654 159.215 20.5904H162.884C162.913 21.9512 163.932 22.8133 165.706 22.8133C167.508 22.8133 168.499 22.0794 168.499 20.9395C168.499 20.1415 168.092 19.5787 166.696 19.2581L163.868 18.5883C161.046 17.9542 159.685 16.6219 159.685 14.114C159.685 11.0362 162.279 9.19089 165.898 9.19089C169.418 9.19089 171.79 11.2285 171.826 14.2708H168.149C168.128 12.9385 167.23 12.0835 165.741 12.0835C164.224 12.0835 163.333 12.7817 163.333 13.9502C163.333 14.8408 164.038 15.4036 165.364 15.7242L168.192 16.3939C170.622 16.9425 171.954 18.0255 172.132 20.0845L172.154 20.6118Z'
fill='currentColor'
/>
<path
d='M22.1363 24.6889C23.1551 23.6701 23.1551 22.0243 22.1363 21.0055L4.44568 3.31489C3.42685 2.29606 1.78105 2.29606 0.762218 3.31489C-0.256611 4.33372 -0.256611 5.97952 0.762218 6.99835L18.4528 24.6889C19.4716 25.7078 21.1174 25.7078 22.1363 24.6889Z'
fill='currentColor'
/>
<path
d='M21.6661 11.6293C22.6849 10.6105 22.6849 8.96471 21.6661 7.94588L14.4844 0.764199C13.4655 -0.254631 11.8197 -0.254631 10.8009 0.764199C9.78208 1.78303 9.78208 3.42883 10.8009 4.44766L17.9826 11.6293C19.0014 12.641 20.6472 12.641 21.6661 11.6293Z'
fill='currentColor'
/>
<path
d='M12.0977 27.2396C13.1165 26.2208 13.1165 24.575 12.0977 23.5562L4.91601 16.3745C3.89718 15.3557 2.25138 15.3557 1.23255 16.3745C0.213723 17.3933 0.213723 19.0391 1.23255 20.058L8.41423 27.2396C9.43306 28.2585 11.0789 28.2585 12.0977 27.2396Z'
fill='currentColor'
/>
</g>
<defs>
<clipPath id='clip0_2911_30'>
<rect width='172.154' height='28' fill='currentColor' />
</clipPath>
</defs>
</svg>
),
},
{
id: 1 + i,
name: "Uideck",
link: "https://uideck.com",
image: (
<svg
width='119'
height='28'
viewBox='0 0 119 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
d='M23.9159 10.3141V19.1146C23.9159 20.9027 22.997 22.5641 21.485 23.5148L14.4093 27.9648C14.2599 28.0598 14.0607 27.9512 14.0607 27.7746V24.6601C14.0607 24.1485 14.3143 23.6732 14.7398 23.388L19.2532 20.3776C19.8824 19.9566 20.2627 19.2504 20.2627 18.4944V12.4282C20.2627 11.9438 20.5207 11.4957 20.9417 11.2512L23.2369 9.92935C23.5402 9.75732 23.9159 9.97462 23.9159 10.3232V10.3141Z'
fill='currentColor'
/>
<path
d='M23.3682 7.67999L13.3726 13.4519C12.671 13.8548 12.2409 14.6017 12.2409 15.412V27.5715C12.2409 27.748 12.0508 27.8567 11.9014 27.7661L2.63922 22.379C1.00499 21.4284 0 19.6855 0 17.7932V10.4324C0 8.21418 1.18154 6.16346 3.1055 5.05436L11.5347 0.183342C11.9557 -0.061114 12.4718 -0.061114 12.8928 0.183342L15.0024 1.4011C15.4551 1.66366 15.4551 2.31554 15.0024 2.57811L4.93892 8.3862C4.23724 8.7891 3.80718 9.53605 3.80718 10.3464V17.3451C3.80718 18.1554 4.23724 18.9023 4.93892 19.3052L8.27529 21.2292C8.34772 21.2699 8.43373 21.2201 8.43373 21.1387V14.1852C8.43373 12.7728 9.18521 11.4736 10.4075 10.7674L20.0771 5.18564C20.5298 4.92307 21.0911 4.94571 21.5212 5.23996L23.4089 6.53015C23.8209 6.81082 23.7982 7.42648 23.3637 7.67999H23.3682Z'
fill='currentColor'
/>
<path
d='M34.8027 6.42281H38.0308V15.1906C38.0308 15.9102 38.1293 16.5518 38.3261 17.1152C38.523 17.6719 38.8149 18.1438 39.2019 18.5307C39.5957 18.9177 40.0811 19.213 40.6581 19.4167C41.2352 19.6135 41.9073 19.712 42.6744 19.712C43.4348 19.712 44.1035 19.6135 44.6805 19.4167C45.2643 19.213 45.7498 18.9177 46.1367 18.5307C46.5305 18.1438 46.8258 17.6719 47.0227 17.1152C47.2195 16.5518 47.318 15.9102 47.318 15.1906V6.42281H50.5461V15.5776C50.5461 16.6231 50.3696 17.5735 50.0165 18.4289C49.6635 19.2843 49.151 20.0175 48.4789 20.6285C47.8068 21.2395 46.9819 21.7113 46.0043 22.0439C45.0335 22.3766 43.9236 22.5429 42.6744 22.5429C41.4253 22.5429 40.3119 22.3766 39.3343 22.0439C38.3635 21.7113 37.542 21.2395 36.8699 20.6285C36.1978 20.0175 35.6853 19.2843 35.3323 18.4289C34.9792 17.5735 34.8027 16.6231 34.8027 15.5776V6.42281Z'
fill='currentColor'
/>
<path
d='M52.7762 6.42281H56.0247V22.3393H52.7762V6.42281Z'
fill='currentColor'
/>
<path
d='M57.542 16.3821C57.542 15.4248 57.7219 14.5626 58.0817 13.7955C58.4415 13.0216 58.9371 12.3631 59.5684 11.8199C60.2066 11.2701 60.9602 10.8491 61.8291 10.5572C62.7049 10.2585 63.6519 10.1092 64.6703 10.1092C65.1048 10.1092 65.5325 10.1363 65.9534 10.1906C66.3811 10.2449 66.7884 10.3196 67.1754 10.4147C67.5691 10.5097 67.9357 10.6251 68.2751 10.7609C68.6214 10.8899 68.9269 11.0324 69.1916 11.1886V5.44522H72.2059V22.3393H69.1916V21.2089C68.9269 21.3922 68.6146 21.5653 68.2548 21.7283C67.895 21.8912 67.508 22.0338 67.0939 22.156C66.6798 22.2782 66.2487 22.3732 65.8006 22.4411C65.3593 22.5158 64.9215 22.5531 64.487 22.5531C63.4686 22.5531 62.5318 22.4038 61.6764 22.105C60.8278 21.8063 60.098 21.3854 59.487 20.8423C58.876 20.2992 58.3974 19.6509 58.0511 18.8973C57.7117 18.137 57.542 17.2985 57.542 16.3821ZM60.709 16.3821C60.709 16.8641 60.804 17.3189 60.9941 17.7466C61.191 18.1743 61.4693 18.5511 61.8291 18.877C62.1957 19.196 62.6336 19.4506 63.1428 19.6407C63.6587 19.824 64.2358 19.9156 64.8739 19.9156C65.2813 19.9156 65.6886 19.8783 66.0959 19.8036C66.5033 19.7222 66.8936 19.6101 67.267 19.4676C67.6472 19.325 68.0002 19.1519 68.3261 18.9482C68.6587 18.7446 68.9472 18.5171 69.1916 18.266V14.101C68.8861 13.8566 68.5637 13.6495 68.2242 13.4798C67.8848 13.3101 67.5386 13.1709 67.1855 13.0623C66.8325 12.9537 66.4761 12.8756 66.1163 12.8281C65.7565 12.7738 65.4069 12.7466 65.0674 12.7466C64.375 12.7466 63.7572 12.8417 63.2141 13.0318C62.6777 13.2151 62.2229 13.4696 61.8495 13.7955C61.4829 14.1214 61.2012 14.5049 61.0043 14.9462C60.8074 15.3875 60.709 15.8661 60.709 16.3821Z'
fill='currentColor'
/>
<path
d='M74.0287 16.2904C74.0287 15.4757 74.195 14.6984 74.5277 13.9584C74.8603 13.2117 75.3389 12.5531 75.9635 11.9829C76.5881 11.4126 77.3518 10.9578 78.2548 10.6183C79.1645 10.2789 80.1964 10.1092 81.3505 10.1092C82.4978 10.1092 83.5297 10.2823 84.4462 10.6285C85.3695 10.9679 86.1502 11.4364 86.7883 12.0338C87.4333 12.6312 87.9255 13.3339 88.2649 14.1417C88.6111 14.9496 88.7843 15.8152 88.7843 16.7385C88.7843 16.8539 88.7809 16.9795 88.7741 17.1152C88.7741 17.2442 88.7673 17.363 88.7537 17.4717H77.3892C77.5182 17.8315 77.7252 18.1607 78.0104 18.4594C78.3023 18.7581 78.6655 19.0161 79.1 19.2334C79.5344 19.4506 80.0368 19.6203 80.6071 19.7425C81.1773 19.8579 81.8087 19.9156 82.5012 19.9156C83.1936 19.9156 83.8827 19.8444 84.5684 19.7018C85.2541 19.5524 85.9092 19.3658 86.5337 19.1417L87.5521 21.4431C87.1583 21.6264 86.7578 21.7894 86.3504 21.9319C85.9499 22.0677 85.529 22.1831 85.0877 22.2782C84.6532 22.3664 84.195 22.4343 83.713 22.4818C83.2378 22.5294 82.7354 22.5531 82.2059 22.5531C80.8549 22.5531 79.6702 22.3902 78.6519 22.0643C77.6336 21.7385 76.7816 21.2938 76.0959 20.7303C75.4102 20.1668 74.8943 19.5049 74.548 18.7446C74.2018 17.9842 74.0287 17.1662 74.0287 16.2904ZM85.5867 15.1193C85.4781 14.7867 85.3084 14.4778 85.0775 14.1926C84.8535 13.9007 84.5718 13.6495 84.2323 13.4391C83.8929 13.2218 83.4991 13.0521 83.0511 12.9299C82.603 12.8077 82.1108 12.7466 81.5745 12.7466C81.0042 12.7466 80.4849 12.8111 80.0165 12.9401C79.548 13.0691 79.1373 13.2422 78.7843 13.4595C78.4313 13.6767 78.1359 13.9279 77.8983 14.213C77.6675 14.4981 77.4978 14.8003 77.3892 15.1193H85.5867Z'
fill='currentColor'
/>
<path
d='M90.0062 16.3617C90.0062 15.4791 90.1658 14.6577 90.4849 13.8973C90.8107 13.1302 91.2825 12.4683 91.9003 11.9116C92.5249 11.3481 93.2853 10.9068 94.1814 10.5878C95.0843 10.2687 96.1128 10.1092 97.2669 10.1092C97.7693 10.1092 98.2751 10.1397 98.7842 10.2008C99.2934 10.2619 99.7822 10.3502 100.251 10.4656C100.726 10.5742 101.171 10.7066 101.585 10.8627C101.999 11.0121 102.359 11.1784 102.664 11.3617L101.269 13.6326C100.61 13.3271 99.9859 13.103 99.3952 12.9605C98.8114 12.8179 98.2174 12.7466 97.6131 12.7466C96.9207 12.7466 96.2995 12.8383 95.7496 13.0216C95.1997 13.1981 94.7313 13.4493 94.3443 13.7751C93.9641 14.0942 93.6722 14.4744 93.4686 14.9157C93.2717 15.3501 93.1732 15.8254 93.1732 16.3413C93.1732 16.8573 93.2785 17.3359 93.4889 17.7772C93.7062 18.2116 94.0083 18.5884 94.3952 18.9075C94.789 19.2198 95.2608 19.4676 95.8107 19.6509C96.3674 19.8274 96.9852 19.9156 97.6641 19.9156C98.4108 19.9156 99.1135 19.8104 99.772 19.6C100.437 19.3895 101.055 19.1078 101.625 18.7548L103.02 21.0256C102.661 21.2429 102.27 21.4465 101.849 21.6366C101.428 21.8199 100.977 21.9795 100.495 22.1152C100.02 22.251 99.5174 22.3562 98.9879 22.4309C98.4651 22.5124 97.922 22.5531 97.3586 22.5531C96.2113 22.5531 95.1827 22.397 94.273 22.0847C93.3633 21.7724 92.5928 21.3413 91.9614 20.7914C91.3301 20.2347 90.8447 19.5796 90.5052 18.826C90.1726 18.0725 90.0062 17.251 90.0062 16.3617Z'
fill='currentColor'
/>
<path
d='M104.976 5.44522H107.99V15.4248L113.611 10.323H118.224L111.941 15.9442L118.621 22.3393H114.1L109.629 18.0114L107.99 19.4778V22.3393H104.976V5.44522Z'
fill='currentColor'
/>
</svg>
),
},
{
id: 1 + i,
name: "Graygrids",
link: "https://graygrids.com",
image: (
<svg
width='134'
height='28'
viewBox='0 0 134 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<g clipPath='url(#clip0_2978_61)'>
<path
opacity='0.1'
d='M28 14C28 6.26801 21.732 0 14 0C6.26801 0 0 6.26801 0 14C0 21.732 6.26801 28 14 28C21.732 28 28 21.732 28 14Z'
fill='url(#paint0_linear_2978_61)'
/>
<path
opacity='0.1'
d='M28 14C28 6.26801 21.732 0 14 0C6.26801 0 0 6.26801 0 14C0 21.732 6.26801 28 14 28C21.732 28 28 21.732 28 14Z'
fill='url(#paint1_linear_2978_61)'
fillOpacity='0.56'
/>
<path
d='M14.2228 5.25C16.4398 5.25 18.5327 6.06909 20.1522 7.56238C20.242 7.64519 20.2429 7.78579 20.1566 7.87212L16.7285 11.3002C16.6455 11.3832 16.5121 11.3853 16.4213 11.3108C15.8022 10.804 15.034 10.5287 14.2242 10.5287C12.3074 10.5274 10.7488 12.086 10.7488 14H5.46875C5.46875 9.17521 9.39665 5.25 14.2228 5.25Z'
fill='currentColor'
/>
<path
d='M10.7488 14C10.7488 15.7964 12.1214 17.2792 13.8736 17.4552C13.9904 17.4669 14.0834 17.5627 14.0834 17.6801V22.5278C14.0834 22.6499 13.9827 22.7487 13.8606 22.7437C9.20065 22.5528 5.46875 18.7036 5.46875 14H10.7488Z'
fill='currentColor'
/>
<path
opacity='0.56'
d='M19.425 14.6945H17.3605C17.2396 14.6945 17.1417 14.7925 17.1417 14.9133V16.9763C17.1417 17.0972 17.2396 17.1951 17.3605 17.1951H19.425C19.5458 17.1951 19.6437 17.0972 19.6437 16.9763V14.9133C19.6437 14.7925 19.5458 14.6945 19.425 14.6945Z'
fill='currentColor'
/>
<path
opacity='0.4'
d='M22.2028 14.6945H20.1384C20.0176 14.6945 19.9197 14.7925 19.9197 14.9133V16.9763C19.9197 17.0972 20.0176 17.1951 20.1384 17.1951H22.2028C22.3236 17.1951 22.4216 17.0972 22.4216 16.9763V14.9133C22.4216 14.7925 22.3236 14.6945 22.2028 14.6945Z'
fill='currentColor'
/>
<path
opacity='0.72'
d='M19.425 17.4728H17.3605C17.2396 17.4728 17.1417 17.5707 17.1417 17.6915V19.7546C17.1417 19.8754 17.2396 19.9733 17.3605 19.9733H19.425C19.5458 19.9733 19.6437 19.8754 19.6437 19.7546V17.6915C19.6437 17.5707 19.5458 17.4728 19.425 17.4728Z'
fill='currentColor'
/>
<path
opacity='0.88'
d='M16.6457 17.4728H14.5813C14.4605 17.4728 14.3625 17.5707 14.3625 17.6915V19.7546C14.3625 19.8754 14.4605 19.9733 14.5813 19.9733H16.6457C16.7666 19.9733 16.8645 19.8754 16.8645 19.7546V17.6915C16.8645 17.5707 16.7666 17.4728 16.6457 17.4728Z'
fill='currentColor'
/>
<path
opacity='0.56'
d='M22.2028 17.4728H20.1384C20.0176 17.4728 19.9197 17.5707 19.9197 17.6915V19.7546C19.9197 19.8754 20.0176 19.9733 20.1384 19.9733H22.2028C22.3236 19.9733 22.4216 19.8754 22.4216 19.7546V17.6915C22.4216 17.5707 22.3236 17.4728 22.2028 17.4728Z'
fill='currentColor'
/>
<path
opacity='0.88'
d='M19.425 20.2493H17.3605C17.2396 20.2493 17.1417 20.3472 17.1417 20.468V22.5311C17.1417 22.6519 17.2396 22.7498 17.3605 22.7498H19.425C19.5458 22.7498 19.6437 22.6519 19.6437 22.5311V20.468C19.6437 20.3472 19.5458 20.2493 19.425 20.2493Z'
fill='currentColor'
/>
<path
opacity='0.96'
d='M16.6457 20.2493H14.5813C14.4605 20.2493 14.3625 20.3472 14.3625 20.468V22.5311C14.3625 22.6519 14.4605 22.7498 14.5813 22.7498H16.6457C16.7666 22.7498 16.8645 22.6519 16.8645 22.5311V20.468C16.8645 20.3472 16.7666 20.2493 16.6457 20.2493Z'
fill='currentColor'
/>
<path
opacity='0.72'
d='M22.2028 20.2493H20.1384C20.0176 20.2493 19.9197 20.3472 19.9197 20.468V22.5311C19.9197 22.6519 20.0176 22.7498 20.1384 22.7498H22.2028C22.3236 22.7498 22.4216 22.6519 22.4216 22.5311V20.468C22.4216 20.3472 22.3236 20.2493 22.2028 20.2493Z'
fill='currentColor'
/>
<path
d='M44.2881 7.875H46.4931V20.517C46.4931 21.3255 46.305 22.0768 45.9287 22.771C45.5612 23.4733 45.0625 24.0817 44.4325 24.5963C43.8025 25.1189 43.085 25.5232 42.28 25.809C41.475 26.103 40.635 26.25 39.76 26.25C38.85 26.25 37.9706 26.0581 37.1219 25.6743C36.2731 25.2986 35.5294 24.7922 34.8906 24.1552C34.2606 23.5264 33.8056 22.82 33.5256 22.036L35.5469 21.1785C35.7131 21.742 36.0106 22.2483 36.4394 22.6975C36.8769 23.1548 37.3844 23.5142 37.9619 23.7755C38.5481 24.045 39.1475 24.1797 39.76 24.1797C40.3375 24.1797 40.8931 24.0858 41.4269 23.898C41.9694 23.7102 42.455 23.4488 42.8837 23.114C43.3212 22.7873 43.6625 22.3995 43.9075 21.9503C44.1612 21.5093 44.2881 21.0315 44.2881 20.517V18.0792C43.8419 18.7815 43.2512 19.3532 42.5162 19.7942C41.79 20.2271 40.9412 20.4435 39.97 20.4435C39.0425 20.4435 38.1719 20.2761 37.3581 19.9413C36.5444 19.6065 35.8312 19.145 35.2187 18.557C34.6062 17.9608 34.125 17.2748 33.775 16.499C33.425 15.7232 33.25 14.8902 33.25 14C33.25 13.1098 33.425 12.2768 33.775 11.501C34.125 10.717 34.6062 10.031 35.2187 9.443C35.8312 8.84683 36.5444 8.38133 37.3581 8.0465C38.1719 7.71167 39.0425 7.54425 39.97 7.54425C40.9412 7.54425 41.79 7.76067 42.5162 8.1935C43.2512 8.62633 43.8419 9.198 44.2881 9.9085V7.875ZM39.9831 18.4468C40.8319 18.4468 41.5669 18.2426 42.1881 17.8343C42.8181 17.426 43.3037 16.8828 43.645 16.205C43.9862 15.5272 44.1569 14.7922 44.1569 14C44.1569 13.1833 43.9819 12.4402 43.6319 11.7705C43.2906 11.0927 42.805 10.5537 42.175 10.1535C41.5537 9.74517 40.8231 9.541 39.9831 9.541C39.1606 9.541 38.4081 9.74112 37.7256 10.1413C37.0431 10.5415 36.5006 11.0805 36.0981 11.7583C35.7044 12.428 35.5075 13.1752 35.5075 14C35.5075 14.8248 35.7087 15.5762 36.1113 16.254C36.5225 16.9237 37.065 17.4586 37.7387 17.8588C38.4212 18.2508 39.1694 18.4468 39.9831 18.4468Z'
fill='currentColor'
/>
<path
d='M48.5991 20.125V7.875H50.8041V9.40629C51.2679 8.83462 51.8541 8.38133 52.5629 8.0465C53.2716 7.7035 54.0416 7.532 54.8729 7.532C55.3804 7.532 55.8704 7.59325 56.3429 7.71575L55.4504 9.77379C55.0916 9.66762 54.7416 9.6145 54.4004 9.6145C53.7441 9.6145 53.1404 9.76562 52.5891 10.0678C52.0466 10.3618 51.6135 10.762 51.2898 11.2683C50.966 11.7746 50.8041 12.3381 50.8041 12.9588V20.125H48.5991Z'
fill='currentColor'
/>
<path
d='M66.7918 7.875H68.9968V20.125H66.7918L66.6999 18.0548C66.2886 18.7653 65.7199 19.341 64.9936 19.782C64.2761 20.223 63.4186 20.4435 62.4211 20.4435C61.4586 20.4435 60.5574 20.2761 59.7174 19.9413C58.8774 19.5983 58.1336 19.1287 57.4861 18.5325C56.8474 17.9282 56.3486 17.234 55.9899 16.45C55.6311 15.666 55.4518 14.8208 55.4518 13.9143C55.4518 13.0405 55.6268 12.2156 55.9768 11.4398C56.3268 10.664 56.8124 9.98612 57.4336 9.40629C58.0636 8.81829 58.7899 8.36095 59.6124 8.03429C60.4349 7.69941 61.3186 7.532 62.2636 7.532C63.2961 7.532 64.2018 7.76066 64.9806 8.218C65.7593 8.66716 66.3893 9.25112 66.8706 9.96979L66.7918 7.875ZM62.3818 18.4468C63.2481 18.4468 63.9961 18.2508 64.6261 17.8588C65.2649 17.4586 65.7549 16.9196 66.0961 16.2418C66.4461 15.564 66.6211 14.8167 66.6211 14C66.6211 13.167 66.4461 12.4157 66.0961 11.746C65.7461 11.0682 65.2518 10.5333 64.6131 10.1413C63.9831 9.74112 63.2393 9.541 62.3818 9.541C61.5156 9.541 60.7281 9.74112 60.0193 10.1413C59.3106 10.5415 58.7461 11.0805 58.3261 11.7583C57.9149 12.428 57.7093 13.1752 57.7093 14C57.7093 14.8248 57.9236 15.5762 58.3524 16.254C58.7811 16.9237 59.3499 17.4586 60.0586 17.8588C60.7674 18.2508 61.5418 18.4468 62.3818 18.4468Z'
fill='currentColor'
/>
<path
d='M79.1506 7.875H81.487L74.3075 26.25H71.9712L74.3469 20.125L69.635 7.875H72.05L75.4494 17.2952L79.1506 7.875Z'
fill='currentColor'
/>
<path
d='M92.6395 7.875H94.8445V20.517C94.8445 21.3255 94.6563 22.0768 94.2799 22.771C93.9128 23.4733 93.4134 24.0817 92.7834 24.5963C92.1534 25.1189 91.4363 25.5232 90.6313 25.809C89.8263 26.103 88.9863 26.25 88.1113 26.25C87.2013 26.25 86.3216 26.0581 85.4731 25.6743C84.6245 25.2986 83.881 24.7922 83.2417 24.1552C82.6117 23.5264 82.1566 22.82 81.8766 22.036L83.8981 21.1785C84.0645 21.742 84.3617 22.2483 84.791 22.6975C85.2281 23.1548 85.736 23.5142 86.3131 23.7755C86.8995 24.045 87.4984 24.1797 88.1113 24.1797C88.6884 24.1797 89.2445 24.0858 89.7781 23.898C90.321 23.7102 90.8063 23.4488 91.2349 23.114C91.6728 22.7873 92.0134 22.3995 92.2584 21.9503C92.5128 21.5093 92.6395 21.0315 92.6395 20.517V18.0792C92.1931 18.7815 91.6028 19.3532 90.8678 19.7942C90.1413 20.2271 89.2928 20.4435 88.3213 20.4435C87.3934 20.4435 86.5231 20.2761 85.7095 19.9413C84.896 19.6065 84.1828 19.145 83.5699 18.557C82.9578 17.9608 82.4763 17.2748 82.1263 16.499C81.7763 15.7232 81.6013 14.8902 81.6013 14C81.6013 13.1098 81.7763 12.2768 82.1263 11.501C82.4763 10.717 82.9578 10.031 83.5699 9.443C84.1828 8.84683 84.896 8.38133 85.7095 8.0465C86.5231 7.71167 87.3934 7.54425 88.3213 7.54425C89.2928 7.54425 90.1413 7.76067 90.8678 8.1935C91.6028 8.62633 92.1931 9.198 92.6395 9.9085V7.875ZM88.3345 18.4468C89.1831 18.4468 89.9181 18.2426 90.5395 17.8343C91.1695 17.426 91.6549 16.8828 91.9963 16.205C92.3378 15.5272 92.5081 14.7922 92.5081 14C92.5081 13.1833 92.3331 12.4402 91.9831 11.7705C91.6417 11.0927 91.1563 10.5537 90.5263 10.1535C89.9049 9.74517 89.1745 9.541 88.3345 9.541C87.5117 9.541 86.7595 9.74112 86.0767 10.1413C85.3945 10.5415 84.8517 11.0805 84.4495 11.7583C84.056 12.428 83.8584 13.1752 83.8584 14C83.8584 14.8248 84.0599 15.5762 84.4628 16.254C84.8734 16.9237 85.4163 17.4586 86.0899 17.8588C86.7728 18.2508 87.521 18.4468 88.3345 18.4468Z'
fill='currentColor'
/>
<path
d='M96.95 20.125V7.875H99.155V9.40629C99.6193 8.83462 100.205 8.38133 100.914 8.0465C101.623 7.7035 102.393 7.532 103.224 7.532C103.731 7.532 104.221 7.59325 104.694 7.71575L103.801 9.77379C103.443 9.66762 103.093 9.6145 102.751 9.6145C102.095 9.6145 101.491 9.76562 100.94 10.0678C100.398 10.3618 99.9646 10.762 99.6411 11.2683C99.3175 11.7746 99.155 12.3381 99.155 12.9588V20.125H96.95Z'
fill='currentColor'
/>
<path
d='M105.257 7.875H107.462V20.125H105.257V7.875ZM106.386 5.87825C106.036 5.87825 105.743 5.77208 105.506 5.55975C105.27 5.34742 105.152 5.082 105.152 4.7635C105.152 4.445 105.27 4.17958 105.506 3.96725C105.743 3.75492 106.031 3.64875 106.373 3.64875C106.714 3.64875 107.003 3.75492 107.239 3.96725C107.475 4.17958 107.593 4.445 107.593 4.7635C107.593 5.082 107.475 5.34742 107.239 5.55975C107.011 5.77208 106.727 5.87825 106.386 5.87825Z'
fill='currentColor'
/>
<path
d='M119.951 1.75H122.156V20.125H119.951V18.0425C119.505 18.7612 118.905 19.341 118.153 19.782C117.4 20.223 116.517 20.4435 115.502 20.4435C114.548 20.4435 113.655 20.2761 112.824 19.9413C111.993 19.6065 111.258 19.145 110.619 18.557C109.989 17.9608 109.495 17.2748 109.136 16.499C108.777 15.7232 108.598 14.8902 108.598 14C108.598 13.1098 108.777 12.2768 109.136 11.501C109.495 10.717 109.989 10.031 110.619 9.443C111.258 8.84683 111.993 8.38133 112.824 8.0465C113.655 7.71167 114.548 7.54425 115.502 7.54425C116.517 7.54425 117.4 7.76475 118.153 8.20579C118.905 8.64679 119.505 9.22662 119.951 9.94529V1.75ZM115.528 18.4468C116.394 18.4468 117.142 18.2508 117.772 17.8588C118.411 17.4586 118.901 16.9196 119.242 16.2418C119.592 15.564 119.767 14.8167 119.767 14C119.767 13.167 119.592 12.4157 119.242 11.746C118.892 11.0682 118.398 10.5333 117.759 10.1413C117.129 9.74112 116.385 9.541 115.528 9.541C114.662 9.541 113.874 9.74112 113.165 10.1413C112.465 10.5415 111.905 11.0805 111.485 11.7583C111.065 12.428 110.855 13.1752 110.855 14C110.855 14.8248 111.07 15.5762 111.498 16.254C111.927 16.9237 112.496 17.4586 113.205 17.8588C113.913 18.2508 114.688 18.4468 115.528 18.4468Z'
fill='currentColor'
/>
<path
d='M128.258 20.3577C127.549 20.3332 126.858 20.2108 126.184 19.9902C125.519 19.7616 124.933 19.4553 124.425 19.0715C123.926 18.6795 123.563 18.2303 123.335 17.724L125.225 16.9645C125.357 17.2422 125.593 17.5035 125.935 17.7485C126.275 17.9935 126.67 18.1895 127.115 18.3365C127.562 18.4835 128.013 18.557 128.468 18.557C128.949 18.557 129.4 18.4876 129.82 18.3488C130.24 18.21 130.58 18.0058 130.843 17.7363C131.115 17.4586 131.25 17.1278 131.25 16.744C131.25 16.3357 131.101 16.0172 130.804 15.7885C130.515 15.5517 130.148 15.3679 129.701 15.2372C129.264 15.0985 128.818 14.9677 128.363 14.8453C127.461 14.6329 126.656 14.3798 125.948 14.0858C125.239 13.7836 124.679 13.4038 124.268 12.9465C123.865 12.481 123.664 11.889 123.664 11.1703C123.664 10.4108 123.887 9.75334 124.333 9.198C124.788 8.64267 125.383 8.21396 126.118 7.91179C126.853 7.60959 127.64 7.4585 128.48 7.4585C129.54 7.4585 130.506 7.67084 131.381 8.0955C132.256 8.52017 132.908 9.09596 133.337 9.82279L131.565 10.7905C131.416 10.4965 131.189 10.2393 130.883 10.0188C130.576 9.79013 130.226 9.61046 129.833 9.47979C129.439 9.34913 129.036 9.27967 128.625 9.2715C128.118 9.25517 127.64 9.31646 127.195 9.45529C126.757 9.59413 126.403 9.80646 126.131 10.0922C125.869 10.37 125.738 10.717 125.738 11.1335C125.738 11.5418 125.878 11.8522 126.158 12.0645C126.446 12.2768 126.818 12.4483 127.273 12.579C127.737 12.7015 128.24 12.8445 128.783 13.0078C129.579 13.2446 130.323 13.5182 131.014 13.8285C131.705 14.1388 132.26 14.5268 132.68 14.9923C133.11 15.4578 133.32 16.0335 133.31 16.7195C133.31 17.4708 133.07 18.1283 132.589 18.6918C132.108 19.2471 131.482 19.6717 130.712 19.9657C129.95 20.2598 129.133 20.3904 128.258 20.3577Z'
fill='currentColor'
/>
</g>
<defs>
<linearGradient
id='paint0_linear_2978_61'
x1='14'
y1='0'
x2='14'
y2='28'
gradientUnits='userSpaceOnUse'
>
<stop stopColor='currentColor' />
<stop offset='1' stopColor='currentColor' />
</linearGradient>
<linearGradient
id='paint1_linear_2978_61'
x1='17.725'
y1='4.06733'
x2='5.39227'
y2='40.8138'
gradientUnits='userSpaceOnUse'
>
<stop offset='0.215628' stopColor='currentColor' stopOpacity='0' />
<stop
offset='0.447191'
stopColor='currentColor'
stopOpacity='0.19'
/>
<stop offset='0.619792' stopColor='currentColor' />
</linearGradient>
<clipPath id='clip0_2978_61'>
<rect width='133.778' height='28' fill='currentColor' />
</clipPath>
</defs>
</svg>
),
},
{
id: 1 + i,
name: "SaaSBold",
link: "https://SaaSBold.com",
image: (
<svg
width='154'
height='28'
viewBox='0 0 154 28'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<g clipPath='url(#clip0_2911_56)'>
<path
d='M38.5 8.02892H43.9926V23.7625H47.278V8.02892H52.7706V5.00026H38.5V8.02892Z'
fill='currentColor'
/>
<path
d='M56.4373 24.0963C58.4136 24.0963 60.1333 23.1979 60.6723 21.8889L60.9033 23.7625H63.6496V16.0625C63.6496 12.5463 61.545 10.6983 58.1313 10.6983C54.692 10.6983 52.4333 12.4949 52.4333 15.2413H55.1026C55.1026 13.9066 56.1293 13.1366 57.9773 13.1366C59.5686 13.1366 60.5953 13.8296 60.5953 15.5493V15.8315L56.7966 16.1139C53.7936 16.3449 52.0996 17.8079 52.0996 20.1436C52.0996 22.5305 53.7423 24.0963 56.4373 24.0963ZM57.464 21.7349C56.0523 21.7349 55.2823 21.1703 55.2823 20.0153C55.2823 18.9885 56.0266 18.3469 57.9773 18.1673L60.621 17.9619V18.6293C60.621 20.5799 59.389 21.7349 57.464 21.7349Z'
fill='currentColor'
/>
<path
d='M68.2915 8.54226C69.3182 8.54226 70.1652 7.69526 70.1652 6.64294C70.1652 5.5906 69.3182 4.76927 68.2915 4.76927C67.2135 4.76927 66.3665 5.5906 66.3665 6.64294C66.3665 7.69526 67.2135 8.54226 68.2915 8.54226ZM66.7258 23.7626H69.8572V11.0833H66.7258V23.7626Z'
fill='currentColor'
/>
<path
d='M76.2494 23.7626V4.6666H73.1438V23.7626H76.2494Z'
fill='currentColor'
/>
<path
d='M81.6131 23.7625L83.1275 19.4249H90.1345L91.6492 23.7625H95.1142L88.3382 5.00026H84.9755L78.1995 23.7625H81.6131ZM86.2331 10.5956C86.4128 10.0823 86.5667 9.51763 86.6437 9.15827C86.6951 9.54327 86.8747 10.1079 87.0287 10.5956L89.1852 16.6529H84.1027L86.2331 10.5956Z'
fill='currentColor'
/>
<path
d='M101.638 24.0963C103.563 24.0963 105.206 23.2493 105.976 21.7863L106.181 23.7626H109.056V4.6666H105.95V12.7003C105.155 11.4426 103.589 10.6983 101.818 10.6983C97.9938 10.6983 95.6838 13.5216 95.6838 17.4743C95.6838 21.4013 97.9685 24.0963 101.638 24.0963ZM102.331 21.2216C100.15 21.2216 98.8155 19.6303 98.8155 17.3716C98.8155 15.1129 100.15 13.4959 102.331 13.4959C104.513 13.4959 105.925 15.0873 105.925 17.3716C105.925 19.6559 104.513 21.2216 102.331 21.2216Z'
fill='currentColor'
/>
<path
d='M115.451 23.7625V16.5759C115.451 14.5226 116.657 13.5473 118.146 13.5473C119.634 13.5473 120.584 14.4969 120.584 16.2679V23.7625H123.715V16.5759C123.715 14.4969 124.87 13.5216 126.385 13.5216C127.873 13.5216 128.849 14.4713 128.849 16.2936V23.7625H131.954V15.4723C131.954 12.5463 130.26 10.6983 127.18 10.6983C125.255 10.6983 123.767 11.6479 123.125 13.1109C122.458 11.6479 121.123 10.6983 119.198 10.6983C117.376 10.6983 116.092 11.5196 115.451 12.5719L115.194 11.0833H112.319V23.7625H115.451Z'
fill='currentColor'
/>
<path
d='M136.594 8.54226C137.621 8.54226 138.468 7.69526 138.468 6.64294C138.468 5.5906 137.621 4.76927 136.594 4.76927C135.516 4.76927 134.669 5.5906 134.669 6.64294C134.669 7.69526 135.516 8.54226 136.594 8.54226ZM135.028 23.7626H138.16V11.0833H135.028V23.7626Z'
fill='currentColor'
/>
<path
d='M144.526 23.7625V16.9353C144.526 14.8819 145.707 13.5473 147.632 13.5473C149.249 13.5473 150.301 14.5739 150.301 16.7043V23.7625H153.432V15.9599C153.432 12.6746 151.79 10.6983 148.607 10.6983C146.887 10.6983 145.347 11.4426 144.552 12.7259L144.295 11.0833H141.395V23.7625H144.526Z'
fill='currentColor'
/>
<path
d='M0 7.36842C0 3.29895 3.29895 0 7.36842 0H20.6315C24.7011 0 28 3.29895 28 7.36842V20.6315C28 24.7011 24.7011 28 20.6315 28H7.36842C3.29895 28 0 24.7011 0 20.6315V7.36842Z'
fill='currentColor'
opacity='.05'
/>
<g filter='url(#filter0_d_2911_56)'>
<path
d='M7.36865 7.36861C7.36865 6.55472 8.02844 5.89493 8.84234 5.89493C9.65626 5.89493 10.316 6.55472 10.316 7.36861V20.6318C10.316 21.4456 9.65626 22.1055 8.84234 22.1055C8.02844 22.1055 7.36865 21.4456 7.36865 20.6318V7.36861Z'
fill='currentColor'
/>
</g>
<g opacity='0.9' filter='url(#filter1_d_2911_56)'>
<path
d='M12.8948 13.2629C12.8948 12.449 13.5546 11.7892 14.3684 11.7892C15.1824 11.7892 15.8421 12.449 15.8421 13.2629V20.6313C15.8421 21.4452 15.1824 22.105 14.3684 22.105C13.5546 22.105 12.8948 21.4452 12.8948 20.6313V13.2629Z'
fill='currentColor'
/>
</g>
<g opacity='0.7' filter='url(#filter2_d_2911_56)'>
<path
d='M18.4207 9.57853C18.4207 8.76461 19.0805 8.10486 19.8944 8.10486C20.7083 8.10486 21.3681 8.76461 21.3681 9.57853V20.6312C21.3681 21.445 20.7083 22.1049 19.8944 22.1049C19.0805 22.1049 18.4207 21.445 18.4207 20.6312V9.57853Z'
fill='currentColor'
/>
</g>
</g>
<defs>
<filter
id='filter0_d_2911_56'
x='6.36865'
y='5.39493'
width='4.94727'
height='18.2105'
filterUnits='userSpaceOnUse'
colorInterpolationFilters='sRGB'
>
<feFlood floodOpacity='0' result='BackgroundImageFix' />
<feColorMatrix
in='SourceAlpha'
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'
result='hardAlpha'
/>
<feOffset dy='0.5' />
<feGaussianBlur stdDeviation='0.5' />
<feComposite in2='hardAlpha' operator='out' />
<feColorMatrix
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0'
/>
<feBlend
mode='normal'
in2='BackgroundImageFix'
result='effect1_dropShadow_2911_56'
/>
<feBlend
mode='normal'
in='SourceGraphic'
in2='effect1_dropShadow_2911_56'
result='shape'
/>
</filter>
<filter
id='filter1_d_2911_56'
x='11.8948'
y='11.2892'
width='4.94727'
height='12.3158'
filterUnits='userSpaceOnUse'
colorInterpolationFilters='sRGB'
>
<feFlood floodOpacity='0' result='BackgroundImageFix' />
<feColorMatrix
in='SourceAlpha'
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'
result='hardAlpha'
/>
<feOffset dy='0.5' />
<feGaussianBlur stdDeviation='0.5' />
<feComposite in2='hardAlpha' operator='out' />
<feColorMatrix
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0'
/>
<feBlend
mode='normal'
in2='BackgroundImageFix'
result='effect1_dropShadow_2911_56'
/>
<feBlend
mode='normal'
in='SourceGraphic'
in2='effect1_dropShadow_2911_56'
result='shape'
/>
</filter>
<filter
id='filter2_d_2911_56'
x='17.4207'
y='7.60486'
width='4.94751'
height='16'
filterUnits='userSpaceOnUse'
colorInterpolationFilters='sRGB'
>
<feFlood floodOpacity='0' result='BackgroundImageFix' />
<feColorMatrix
in='SourceAlpha'
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'
result='hardAlpha'
/>
<feOffset dy='0.5' />
<feGaussianBlur stdDeviation='0.5' />
<feComposite in2='hardAlpha' operator='out' />
<feColorMatrix
type='matrix'
values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0'
/>
<feBlend
mode='normal'
in2='BackgroundImageFix'
result='effect1_dropShadow_2911_56'
/>
<feBlend
mode='normal'
in='SourceGraphic'
in2='effect1_dropShadow_2911_56'
result='shape'
/>
</filter>
<clipPath id='clip0_2911_56'>
<rect width='154' height='28' fill='currentColor' />
</clipPath>
</defs>
</svg>
),
},
];
export default brandData;
================================================
FILE: src/components/Home/Hero/index.tsx
================================================
import Image from "next/image";
import React from "react";
import brandData from "./brandData";
import Link from "next/link";
const Hero = () => {
return (
<section className='relative z-1 overflow-hidden pb-17.5 pt-30 lg:pb-20 lg:pt-30 xl:pb-25 xl:pt-[170px]'>
<div className='mx-auto w-full max-w-[740px] px-4 text-center sm:px-8 xl:px-0'>
<h1 className='mb-5 font-satoshi text-heading-4 font-bold -tracking-[1.6px] text-black dark:text-white lg:text-heading-2 xl:text-[58px] xl:leading-[1.12]'>
Full-Stack{" "}
<span className='relative text-primary'>
SaaS Boilerplate
<span className='absolute bottom-0.5 left-0 h-2 w-full pl-1 pr-2'>
<svg
className='fill-current'
width='106%'
height='100%'
viewBox='0 0 100 7'
preserveAspectRatio='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M100 2.49998C100 1.50001 100 2.5 100 1.50001C64.2857 -0.240394 17.4603 3.99028 0 6.05927L0 2.05807C17.4603 0.641568 64.2857 0 100 2.49998Z'
/>
</svg>
</span>
</span>{" "}
Built on Next.js
</h1>
<p className='mx-auto mb-7.5 w-full max-w-[580px] text-lg -tracking-[0.2px] dark:text-gray-5'>
A full-stack SaaS boilerplate and starter kit comes with all essential
integrations, pages, components, user/admin dashboards, landing page,
design source and everything you need to turn your feature-rich SaaS
startup idea into reality in a day!
</p>
<Link
href='#'
className='inline-flex items-center gap-4 rounded-full bg-black py-2 pl-7.5 pr-2 font-satoshi font-medium text-white hover:bg-black/90 dark:bg-primary hover:dark:bg-primary'
>
<span> Try Demo </span>
<span className='inline-flex h-9 w-9 items-center justify-center rounded-full bg-primary text-white dark:bg-white dark:text-primary'>
<svg
className='fill-current'
width='20'
height='20'
viewBox='0 0 20 20'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M7.5 5.625C7.15482 5.625 6.875 5.34518 6.875 5C6.875 4.65482 7.15482 4.375 7.5 4.375H15C15.3452 4.375 15.625 4.65482 15.625 5V12.5C15.625 12.8452 15.3452 13.125 15 13.125C14.6548 13.125 14.375 12.8452 14.375 12.5V6.50888L5.44194 15.4419C5.19786 15.686 4.80214 15.686 4.55806 15.4419C4.31398 15.1979 4.31398 14.8021 4.55806 14.5581L13.4911 5.625H7.5Z'
/>
</svg>
</span>
</Link>
</div>
{/* <!-- Hero brands --> */}
<div className='mx-auto mt-20 w-full max-w-[1170px] px-4 sm:px-8 lg:mt-25 xl:mt-32.5 xl:px-0'>
<h2 className='text-center font-satoshi text-lg font-medium text-black dark:text-white'>
Built by the same team behind numerous successful SaaS and digital
products
</h2>
<div className='mt-9 flex flex-wrap items-center justify-center gap-7.5 xl:gap-16'>
{/* <!-- brand item --> */}
{brandData?.map((brand, key) => (
<Link
key={key}
href={brand.link}
aria-label={brand.name}
className='text-dark-4 duration-300 ease-in-out hover:text-dark-3 dark:hover:text-white'
>
{brand.image}
</Link>
))}
</div>
</div>
{/* <!-- Hero Bg Shapes --> */}
<div className='hidden sm:block'>
<div className='absolute left-0 top-0 -z-1'>
<Image
src='/images/hero/hero-shape-01.svg'
alt='shape'
width={340}
height={480}
/>
</div>
<div className='absolute right-0 top-0 -z-1'>
<Image
src='/images/hero/hero-shape-02.svg'
alt='shape'
width={425}
height={682}
/>
</div>
</div>
</section>
);
};
export default Hero;
================================================
FILE: src/components/Home/Newsletter/Graphics.tsx
================================================
export default function Graphics() {
return (
<>
<div className='absolute right-0 top-0 -z-10 dark:opacity-10'>
<svg
width='376'
height='377'
viewBox='0 0 376 377'
fill='none'
xmlns='http://www.w3.org/2000/svg'
>
<g opacity='0.5'>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-3.68084e-06 84.5721L376 84.5721L376 85.4981L-3.72132e-06 85.4981L-3.68084e-06 84.5721Z'
fill='url(#paint0_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-2.39682e-06 55.1971L376 55.1971L376 56.1231L-2.4373e-06 56.1231L-2.39682e-06 55.1971Z'
fill='url(#paint1_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-1.1128e-06 25.8221L376 25.8221L376 26.7481L-1.15328e-06 26.7481L-1.1128e-06 25.8221Z'
fill='url(#paint2_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M114.367 376.364L114.367 0.364246L115.293 0.364246L115.293 376.364L114.367 376.364Z'
fill='url(#paint3_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M84.9917 376.364L84.9916 0.364245L85.9177 0.364245L85.9177 376.364L84.9917 376.364Z'
fill='url(#paint4_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M55.6167 376.364L55.6166 0.364244L56.5427 0.364244L56.5427 376.364L55.6167 376.364Z'
fill='url(#paint5_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M26.2415 376.364L26.2414 0.364243L27.1675 0.364243L27.1675 376.364L26.2415 376.364Z'
fill='url(#paint6_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-4.96486e-06 113.947L376 113.947L376 114.873L-5.00534e-06 114.873L-4.96486e-06 113.947Z'
fill='url(#paint7_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M143.742 376.364L143.742 0.364248L144.668 0.364248L144.668 376.364L143.742 376.364Z'
fill='url(#paint8_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-6.24889e-06 143.322L376 143.322L376 144.248L-6.28936e-06 144.248L-6.24889e-06 143.322Z'
fill='url(#paint9_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M173.117 376.364L173.117 0.364249L174.043 0.364249L174.043 376.364L173.117 376.364Z'
fill='url(#paint10_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-7.53291e-06 172.697L376 172.697L376 173.623L-7.57339e-06 173.623L-7.53291e-06 172.697Z'
fill='url(#paint11_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M202.492 376.364L202.492 0.36425L203.418 0.36425L203.418 376.364L202.492 376.364Z'
fill='url(#paint12_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-8.81693e-06 202.072L376 202.072L376 202.998L-8.85741e-06 202.998L-8.81693e-06 202.072Z'
fill='url(#paint13_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M231.867 376.364L231.867 0.364252L232.793 0.364252L232.793 376.364L231.867 376.364Z'
fill='url(#paint14_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-1.0101e-05 231.447L376 231.447L376 232.373L-1.01414e-05 232.373L-1.0101e-05 231.447Z'
fill='url(#paint15_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M261.242 376.364L261.242 0.364253L262.168 0.364253L262.168 376.364L261.242 376.364Z'
fill='url(#paint16_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-1.1385e-05 260.822L376 260.822L376 261.748L-1.14255e-05 261.748L-1.1385e-05 260.822Z'
fill='url(#paint17_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M290.617 376.364L290.617 0.364254L291.543 0.364254L291.543 376.364L290.617 376.364Z'
fill='url(#paint18_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-1.2669e-05 290.197L376 290.197L376 291.123L-1.27095e-05 291.123L-1.2669e-05 290.197Z'
fill='url(#paint19_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M319.992 376.364L319.992 0.364255L320.918 0.364255L320.918 376.364L319.992 376.364Z'
fill='url(#paint20_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M-1.3953e-05 319.572L376 319.572L376 320.498L-1.39935e-05 320.498L-1.3953e-05 319.572Z'
fill='url(#paint21_linear_2135_4461)'
/>
<path
fillRule='evenodd'
clipRule='evenodd'
d='M349.367 376.364L349.367 0.364257L350.293 0.364257L350.293 376.364L349.367 376.364Z'
fill='url(#paint22_linear_2135_4461)'
/>
<path
d='M59.1417 290.197C57.5086 290.802 56.221 292.089 55.6167 293.722C55.0124 292.089 53.7248 290.802 52.0917 290.197C53.7248 289.593 55.0124 288.305 55.6167 286.672C56.221 288.305 57.5086 289.593 59.1417 290.197Z'
fill='url(#paint23_linear_2135_4461)'
/>
<path
d='M59.1417 319.572C57.5086 320.177 56.221 321.464 55.6167 323.097C55.0124 321.464 53.7248 320.177 52.0917 319.572C53.7248 318.968 55.0124 317.68 55.6167 316.047C56.221 317.68 57.5086 318.968 59.1417 319.572Z'
fill='url(#paint24_linear_2135_4461)'
/>
<path
d='M59.1417 260.822C57.5086 261.427 56.221 262.714 55.6167 264.347C55.0124 262.714 53.7248 261.427 52.0917 260.822C53.7248 260.218 55.0124 258.93 55.6167 257.297C56.221 258.93 57.5086 260.218 59.1417 260.822Z'
fill='url(#paint25_linear_2135_4461)'
/>
<path
d='M59.1417 231.447C57.5086 232.052 56.221 233.339 55.6167 234.972C55.0124 233.339 53.7248 232.052 52.0917 231.447C53.7248 230.843 55.0124 229.555 55.6167 227.922C56.221 229.555 57.5086 230.843 59.1417 231.447Z'
fill='url(#paint26_linear_2135_4461)'
/>
<path
d='M59.1417 202.072C57.5086 202.677 56.221 203.964 55.6167 205.597C55.0124 203.964 53.7248 202.677 52.0917 202.072C53.7248 201.468 55.0124 200.18 55.6167 198.547C56.221 200.18 57.5086 201.468 59.1417 202.072Z'
fill='url(#paint27_linear_2135_4461)'
/>
<path
d='M59.1417 172.697C57.5086 173.302 56.221 174.589 55.6167 176.222C55.0124 174.589 53.7248 173.302 52.0917 172.697C53.7248 172.093 55.0124 170.805 55.6167 169.172C56.221 170.805 57.5086 172.093 59.1417 172.697Z'
fill='url(#paint28_linear_2135_4461)'
/>
<path
d='M59.1417 113.947C57.5086 114.552 56.221 115.839 55.6167 117.472C55.0124 115.839 53.7248 114.552 52.0917 113.947C53.7248 113.343 55.0124 112.055 55.6167 110.422C56.221 112.055 57.5086 113.343 59.1417 113.947Z'
fill='url(#paint29_linear_2135_4461)'
/>
<path
d='M59.1417 143.322C57.5086 143.927 56.221 145.214 55.6167 146.847C55.0124 145.214 53.7248 143.927 52.0917 143.322C53.7248 142.718 55.0124 141.43 55.6167 139.797C56.221 141.43 57.5086 142.718 59.1417 143.322Z'
fill='url(#paint30_linear_2135_4461)'
/>
<path
d='M59.1417 84.5723C57.5086 85.1766 56.221 86.4642 55.6167 88.0973C55.0124 86.4642 53.7248 85.1766 52.0917 84.5723C53.7248 83.968 55.0124 82.6804 55.6167 81.0473C56.221 82.6804 57.5086 83.968 59.1417 84.5723Z'
fill='url(#paint31_linear_2135_4461)'
/>
<path
d='M59.1417 55.1973C57.5086 55.8016 56.221 57.0892 55.6167 58.7223C55.0124 57.0892 53.7248 55.8016 52.0917 55.1973C53.7248 54.593 55.0124 53.3054 55.6167 51.6723C56.221 53.3054 57.5086 54.593 59.1417 55.1973Z'
fill='url(#paint32_linear_2135_4461)'
/>
<path
d='M59.1418 25.8221C57.5087 26.4264 56.2211 27.714 55.6168 29.3471C55.0125 27.714 53.7249 26.4264 52.0918 25.8221C53.7249 25.2178 55.0125 23.9302 55.6168 22.2971C56.2211 23.9302 57.5087 25.2178 59.1418 25.8221Z'
fill='url(#paint33_linear_2135_4461)'
/>
<path
d='M29.7667 290.197C28.1336 290.802 26.846 292.089 26.2417 293.722C25.6374 292.089 24.3498 290.802 22.7167 290.197C24.3498 289.593 25.6374 288.305 26.2417 286.672C26.846 288.305 28.1336 289.593 29.7667 290.197Z'
fill='url(#paint34_linear_2135_4461)'
/>
<path
d='M29.7667 319.572C28.1336 320.177 26.846 321.464 26.2417 323.097C25.6374 321.464 24.3498 320.177 22.7167 319.572C24.3498 318.968 25.6374 317.68 26.2417 316.047C26.846 317.68 28.1336 318.968 29.7667 319.572Z'
fill='url(#paint35_linear_2135_4461)'
/>
<path
d='M29.7667 260.822C28.1336 261.427 26.846 262.714 26.2417 264.347C25.6374 262.714 24.3498 261.427 22.7167 260.822C24.3498 260.218 25.6374 258.93 26.2417 257.297C26.846 258.93 28.1336 260.218 29.7667 260.822Z'
fill='url(#paint36_linear_2135_4461)'
/>
<path
d='M29.7667 231.447C28.1336 232.052 26.846 233.339 26.2417 234.972C25.6374 233.339 24.3498 232.052 22.7167 231.447C24.3498 230.843 25.6374 229.555 26.2417 227.922C26.846 229.555 28.1336 230.843 29.7667 231.447Z'
fill='url(#paint37_linear_2135_4461)'
/>
<path
d='M29.7667 202.072C28.1336 202.677 26.846 203.964 26.2417 205.597C25.6374 203.964 24.3498 202.677 22.7167 202.072C24.3498 201.468 25.6374 200.18 26.2417 198.547C26.846 200.18 28.1336 201.468 29.7667 202.072Z'
fill='url(#paint38_linear_2135_4461)'
/>
<path
d='M29.7667 172.697C28.1336 173.302 26.846 174.589 26.2417 176.222C25.6374 174.589 24.3498 173.302 22.7167 172.697C24.3498 172.093 25.6374 170.805 26.2417 169.172C26.846 170.805 28.1336 172.093 29.7667 172.697Z'
fill='url(#paint39_linear_2135_4461)'
/>
<path
d='M29.7667 113.947C28.1336 114.552 26.846 115.839 26.2417 117.472C25.6374 115.839 24.3498 114.552 22.7167 113.947C24.3498 113.343 25.6374 112.055 26.2417 110.422C26.846 112.055 28.1336 113.343 29.7667 113.947Z'
fill='url(#paint40_linear_2135_4461)'
/>
<path
d='M29.7667 143.322C28.1336 143.927 26.846 145.214 26.2417 146.847C25.6374 145.214 24.3498 143.927 22.7167 143.322C24.3498 142.718 25.6374 141.43 26.2417 139.797C26.846 141.43 28.1336 142.718 29.7667 143.322Z'
fill='url(#paint41_linear_2135_4461)'
/>
<path
d='M29.7667 84.5723C28.1336 85.1766 26.846 86.4642 26.2417 88.0973C25.6374 86.4642 24.3498 85.1766 22.7167 84.5723C24.3498 83.968 25.6374 82.6804 26.2417 81.0473C26.846 82.6804 28.1336 83.968 29.7667 84.5723Z'
fill='url(#paint42_linear_2135_4461)'
/>
<path
d='M29.7667 55.1973C28.1336 55.8016 26.846 57.0892 26.2417 58.7223C25.6374 57.0892 24.3498 55.8016 22.7167 55.1973C24.3498 54.593 25.6374 53.3054 26.2417 51.6723C26.846 53.3054 28.1336 54.593 29.7667 55.1973Z'
fill='url(#paint43_linear_2135_4461)'
/>
<path
d='M29.7668 25.8221C28.1337 26.4264 26.8461 27.714 26.2418 29.3471C25.6375 27.714 24.3499 26.4264 22.7168 25.8221C24.3499 25.2178 25.6375 23.9302 26.2418 22.2971C26.8461 23.9302 28.1337 25.2178 29.7668 25.8221Z'
fill='url(#paint44_linear_2135_4461)'
/>
<path
d='M88.5167 290.197C86.8836 290.802 85.596 292.089 84.9917 293.722C84.3874 292.089 83.0998 290.802 81.4667 290.197C83.0998 289.593 84.3874 288.305 84.9917 286.672C85.596 288.305 86.8836 289.593 88.5167 290.197Z'
fill='url(#paint45_linear_2135_4461)'
/>
<path
d='M88.5167 319.572C86.8836 320.177 85.596 321.464 84.9917 323.097C84.3874 321.464 83.0998 320.177 81.4667 319.572C83.0998 318.968 84.3874 317.68 84.9917 316.047C85.596 317.68 86.8836 318.968 88.5167 319.572Z'
fill='url(#paint46_linear_2135_4461)'
/>
<path
d='M88.5167 260.822C86.8836 261.427 85.596 262.714 84.9917 264.347C84.3874 262.714 83.0998 261.427 81.4667 260.822C83.0998 260.218 84.3874 258.93 84.9917 257.297C85.596 258.93 86.8836 260.218 88.5167 260.822Z'
fill='url(#paint47_linear_2135_4461)'
/>
<path
d='M88.5167 231.447C86.8836 232.052 85.596 233.339 84.9917 234.972C84.3874 233.339 83.0998 232.052 81.4667 231.447C83.0998 230.843 84.3874 229.555 84.9917 227.922C85.596 229.555 86.8836 230.843 88.5167 231.447Z'
fill='url(#paint48_linear_2135_4461)'
/>
<path
d='M88.5167 202.072C86.8836 202.677 85.596 203.964 84.9917 205.597C84.3874 203.964 83.0998 202.677 81.4667 202.072C83.0998 201.468 84.3874 200.18 84.9917 198.547C85.596 200.18 86.8836 201.468 88.5167 202.072Z'
fill='url(#paint49_linear_2135_4461)'
/>
<path
d='M88.5167 172.697C86.8836 173.302 85.596 174.589 84.9917 176.222C84.3874 174.589 83.0998 173.302 81.4667 172.697C83.0998 172.093 84.3874 170.805 84.9917 169.172C85.596 170.805 86.8836 172.093 88.5167 172.697Z'
fill='url(#paint50_linear_2135_4461)'
/>
<path
d='M88.5167 113.947C86.8836 114.552 85.596 115.839 84.9917 117.472C84.3874 115.839 83.0998 114.552 81.4667 113.947C83.0998 113.343 84.3874 112.055 84.9917 110.422C85.596 112.055 86.8836 113.343 88.5167 113.947Z'
fill='url(#paint51_linear_2135_4461)'
/>
<path
d='M88.5167 143.322C86.8836 143.927 85.596 145.214 84.9917 146.847C84.3874 145.214 83.0998 143.927 81.4667 143.322C83.0998 142.718 84.3874 141.43 84.9917 139.797C85.596 141.43 86.8836 142.718 88.5167 143.322Z'
fill='url(#paint52_linear_2135_4461)'
/>
<path
d='M88.5167 84.5723C86.8836 85.1766 85.596 86.4642 84.9917 88.0973C84.3874 86.4642 83.0998 85.1766 81.4667 84.5723C83.0998 83.968 84.3874 82.6804 84.9917 81.0473C85.596 82.6804 86.8836 83.968 88.5167 84.5723Z'
fill='url(#paint53_linear_2135_4461)'
/>
<path
d='M88.5167 55.1973C86.8836 55.8016 85.596 57.0892 84.9917 58.7223C84.3874 57.0892 83.0998 55.8016 81.4667 55.1973C83.0998 54.593 84.3874 53.3054 84.9917 51.6723C85.596 53.3054 86.8836 54.593 88.5167 55.1973Z'
fill='url(#paint54_linear_2135_4461)'
/>
<path
d='M88.5168 25.8221C86.8837 26.4264 85.5961 27.714 84.9918 29.3471C84.3875 27.714 83.0999 26.4264 81.4668 25.8221C83.0999 25.2178 84.3875 23.9302 84.9918 22.2971C85.5961 23.9302 86.8837 25.2178 88.5168 25.8221Z'
fill='url(#paint55_linear_2135_4461)'
/>
<path
d='M117.892 290.197C116.259 290.802 114.971 292.089 114.367 293.722C113.762 292.089 112.475 290.802 110.842 290.197C112.475 289.593 113.762 288.305 114.367 286.672C114.971 288.305 116.259 289.593 117.892 290.197Z'
fill='url(#paint56_linear_2135_4461)'
/>
<path
d='M117.892 319.572C116.259 320.177 114.971 321.464 114.367 323.097C113.762 321.464 112.475 320.177 110.842 319.572C112.475 318.968 113.762 317.68 114.367 316.047C114.971 317.68 116.259 318.968 117.892 319.572Z'
fill='url(#paint57_linear_2135_4461)'
/>
<path
d='M117.892 260.822C116.259 261.427 114.971 262.714 114.367 264.347C113.762 262.714 112.475 261.427 110.842 260.822C112.475 260.218 113.762 258.93 114.367 257.297C114.971 258.93 116.259 260.218 117.892 260.822Z'
fill='url(#paint58_linear_2135_4461)'
/>
<path
d='M117.892 231.447C116.259 232.052 114.971 233.339 114.367 234.972C113.762 233.339 112.475 232.052 110.842 231.447C112.475 230.843 113.762 229.555 114.367 227.922C114.971 229.555 116.259 230.843 117.892 231.447Z'
fill='url(#paint59_linear_2135_4461)'
/>
<path
d='M117.892 202.072C116.259 202.677 114.971 203.964 114.367 205.597C113.762 203.964 112.475 202.677 110.842 202.072C112.475 201.468 113.762 200.18 114.367 198.547C114.971 200.18 116.259 201.468 117.892 202.072Z'
fill='url(#paint60_linear_2135_4461)'
/>
<path
d='M117.892 172.697C116.259 173.302 114.971 174.589 114.367 176.222C113.762 174.589 112.475 173.302 110.842 172.697C112.475 172.093 113.762 170.805 114.367 169.172C114.971 170.805 116.259 172.093 117.892 172.697Z'
fill='url(#paint61_linear_2135_4461)'
/>
<path
d='M117.892 113.947C116.259 114.552 114.971 115.839 114.367 117.472C113.762 115.839 112.475 114.552 110.842 113.947C112.475 113.343 113.762 112.055 114.367 110.422C114.971 112.055 116.259 113.343 117.892 113.947Z'
fill='url(#paint62_linear_2135_4461)'
/>
<path
d='M117.892 143.322C116.259 143.927 114.971 145.214 114.367 146.847C113.762 145.214 112.475 143.927 110.842 143.322C112.475 142.718 113.762 141.43 114.367 139.797C114.971 141.43 116.259 142.718 117.892 143.322Z'
fill='url(#paint63_linear_2135_4461)'
/>
<path
d='M117.892 84.5723C116.259 85.1766 114.971 86.4642 114.367 88.0973C113.762 86.4642 112.475 85.1766 110.842 84.5723C112.475 83.968 113.762 82.6804 114.367 81.0473C114.971 82.6804 116.259 83.968 117.892 84.5723Z'
fill='url(#paint64_linear_2135_4461)'
/>
<path
d='M117.892 55.1973C116.259 55.8016 114.971 57.0892 114.367 58.7223C113.762 57.0892 112.475 55.8016 110.842 55.1973C112.475 54.593 113.762 53.3054 114.367 51.6723C114.971 53.3054 116.259 54.593 117.892 55.1973Z'
fill='url(#paint65_linear_2135_4461)'
/>
<path
d='M117.892 25.8221C116.259 26.4264 114.971 27.714 114.367 29.3471C113.762 27.714 112.475 26.4264 110.842 25.8221C112.475 25.2178 113.762 23.9302 114.367 22.2971C114.971 23.9302 116.259 25.2178 117.892 25.8221Z'
fill='url(#paint66_linear_2135_4461)'
/>
<path
d='M147.267 290.197C145.634 290.802 144.346 292.089 143.742 293.722C143.137 292.089 141.85 290.802 140.217 290.197C141.85 289.593 143.137 288.305 143.742 286.672C144.346 288.305 145.634 289.593 147.267 290.197Z'
fill='url(#paint67_linear_2135_4461)'
/>
<path
d='M147.267 319.572C145.634 320.177 144.346 321.464 143.742 323.097C143.137 321.464 141.85 320.177 140.217 319.572C141.85 318.968 143.137 317.68 143.742 316.047C144.346 317.68 145.634 318.968 147.267 319.572Z'
fill='url(#paint68_linear_2135_4461)'
/>
<path
d='M147.267 260.822C145.634 261.427 144.346 262.714 143.742 264.347C143.137 262.714 141.85 261.427 140.217 260.822C141.85 260.218 143.137 258.93 143.742 257.297C144.346 258.93 145.634 260.218 147.267 260.822Z'
fill='url(#paint69_linear_2135_4461)'
/>
<path
d='M147.267 231.447C145.634 232.052 144.346 233.339 143.742 234.972C143.137 233.339 141.85 232.052 140.217 231.447C141.85 230.843 143.137 229.555 143.742 227.922C144.346 229.555 145.634 230.843 147.267 231.447Z'
fill='url(#paint70_linear_2135_4461)'
/>
<path
d='M147.267 202.072C145.634 202.677 144.346 203.964 143.742 205.597C143.137 203.964 141.85 202.677 140.217 202.072C141.85 201.468 143.137 200.18 143.742 198.547C144.346 200.18 145.634 201.468 147.267 202.072Z'
fill='url(#paint71_linear_2135_4461)'
/>
<path
d='M147.267 172.697C145.634 173.302 144.346 174.589 143.742 176.222C143.137 174.589 141.85 173.302 140.217 172.697C141.85 172.093 143.137 170.805 143.742 169.172C144.346 170.805 145.634 172.093 147.267 172.697Z'
fill='url(#paint72_linear_2135_4461)'
/>
<path
d='M147.267 113.947C145.634 114.552 144.346 115.839 143.742 117.472C143.137 115.839 141.85 114.552 140.217 113.947C141.85 113.343 143.137 112.055 143.742 110.422C144.346 112.055 145.634 113.343 147.267 113.947Z'
fill='url(#paint73_linear_2135_4461)'
/>
<path
d='M147.267 143.322C145.634 143.927 144.346 145.214 143.742 146.847C143.137 145.214 141.85 143.927 140.217 143.322C141.85 142.718 143.137 141.43 143.742 139.797C144.346 141.43 145.634 142.718 147.267 143.322Z'
fill='url(#paint74_linear_2135_4461)'
/>
<path
d='M147.267 84.5723C145.634 85.1766 144.346 86.4642 143.742 88.0973C143.137 86.4642 141.85 85.1766 140.217 84.5723C141.85 83.968 143.137 82.6804 143.742 81.0473C144.346 82.6804 145.634 83.968 147.267 84.5723Z'
fill='url(#paint75_linear_2135_4461)'
/>
<path
d='M147.267 55.1973C145.634 55.8016 144.346 57.0892 143.742 58.7223C143.137 57.0892 141.85 55.8016 140.217 55.1973C141.85 54.593 143.137 53.3054 143.742 51.6723C144.346 53.3054 145.634 54.593 147.267 55.1973Z'
fill='url(#paint76_linear_2135_4461)'
/>
<path
d='M147.267 25.8221C145.634 26.4264 144.346 27.714 143.742 29.3471C143.137 27.714 141.85 26.4264 140.217 25.8221C141.85 25.2178 143.137 23.9302 143.742 22.2971C144.346 23.9302 145.634 25.2178 147.267 25.8221Z'
fill='url(#paint77_linear_2135_4461)'
/>
<path
d='M176.642 290.197C175.009 290.802 173.721 292.089 173.117 293.722C172.512 292.089 171.225 290.802 169.592 290.197C171.225 289.593 172.512 288.305 173.117 286.672C173.721 288.305 175.009 289.593 176.642 290.197Z'
fill='url(#paint78_linear_2135_4461)'
/>
<path
d='M176.642 319.572C175.009 320.177 173.721 321.464 173.117 323.097C172.512 321.464 171.225 320.177 169.592 319.572C171.225 318.968 172.512 317.68 173.117 316.047C173.721 317.68 175.009 318.968 176.642 319.572Z'
fill='url(#paint79_linear_2135_4461)'
/>
<path
d='M176.642 260.822C175.009 261.427 173.721 262.714 173.117 264.347C172.512 262.714 171.225 261.427 169.592 260.822C171.225 260.218 172.512 258.93 173.117 257.297C173.721 258.93 175.009 260.218 176.642 260.822Z'
fill='url(#paint80_linear_2135_4461)'
/>
<path
d='M176.642 231.447C175.009 232.052 173.721 233.339 173.117 234.972C172.512 233.339 171.225 232.052 169.592 231.447C171.225 230.843 172.512 229.555 173.117 227.922C173.721 229.555 175.009 230.843 176.642 231.447Z'
fill='url(#paint81_linear_2135_4461)'
/>
<path
d='M176.642 202.072C175.009 202.677 173.721 203.964 173.117 205.597C172.512 203.964 171.225 202.677 169.592 202.072C171.225 201.468 172.512 200.18 173.117 198.547C173.721 200.18 175.009 201.468 176.642 202.072Z'
fill='url(#paint82_linear_2135_4461)'
/>
<path
d='M176.642 172.697C175.009 173.302 173.721 174.589 173.117 176.222C172.512 174.589 171.225 173.302 169.592 172.697C171.225 172.093 172.512 170.805 173.117 169.172C173.721 170.805 175.009 172.093 176.642 172.697Z'
fill='url(#paint83_linear_2135_4461)'
/>
<path
d='M176.642 113.947C175.009 114.552 173.721 115.839 173.117 117.472C172.512 115.839 171.225 114.552 169.592 113.947C171.225 113.343 172.512 112.055 173.117 110.422C173.721 112.055 175.009 113.343 176.642 113.947Z'
fill='url(#paint84_linear_2135_4461)'
/>
<path
d='M176.642 143.322C175.009 143.927 173.721 145.214 173.117 146.847C172.512 145.214 171.225 143.927 169.592 143.322C171.225 142.718 172.512 141.43 173.117 139.797C173.721 141.43 175.009 142.718 176.642 143.322Z'
fill='url(#paint85_linear_2135_4461)'
/>
<path
d='M176.642 84.5723C175.009 85.1766 173.721 86.4642 173.117 88.0973C172.512 86.4642 171.225 85.1766 169.592 84.5723C171.225 83.968 172.512 82.6804 173.117 81.0473C173.721 82.6804 175.009 83.968 176.642 84.5723Z'
fill='url(#paint86_linear_2135_4461)'
/>
<path
d='M176.642 55.1973C175.009 55.8016 173.721 57.0892 173.117 58.7223C172.512 57.0892 171.225 55.8016 169.592 55.1973C171.225 54.593 172.512 53.3054 173.117 51.6723C173.721 53.3054 175.009 54.593 176.642 55.1973Z'
fill='url(#paint87_linear_2135_4461)'
/>
<path
d='M176.642 25.8221C175.009 26.4264 173.721 27.714 173.117 29.3471C172.512 27.714 171.225 26.4264 169.592 25.8221C171.225 25.2178 172.512 23.9302 173.117 22.2971C173.721 23.9302 175.009 25.2178 176.642 25.8221Z'
fill='url(#paint88_linear_2135_4461)'
/>
<path
d='M206.017 290.197C204.384 290.802 203.096 292.089 202.492 293.722C201.887 292.089 200.6 290.802 198.967 290.197C200.6 289.593 201.887 288.305 202.492 286.672C203.096 288.305 204.384 289.593 206.017 290.197Z'
fill='url(#paint89_linear_2135_4461)'
/>
<path
d='M206.017 319.572C204.384 320.177 203.096 321.464 202.492 323.097C201.887 321.464 200.6 320.177 198.967 319.572C200.6 318.968 201.887 317.68 202.492 316.047C203.096 317.68 204.384 318.968 206.017 319.572Z'
fill='url(#paint90_linear_2135_4461)'
/>
<path
d='M206.017 260.822C204.384 261.427 203.096 262.714 202.492 264.347C201.887 262.714 200.6 261.427 198.967 260.822C200.6 260.218 201.887 258.93 202.492 257.297C203.096 258.93 204.384 260.218 206.017 260.822Z'
fill='url(#paint91_linear_2135_4461)'
/>
<path
d='M206.017 231.447C204.384 232.052 203.096 233.339 202.492 234.972C201.887 233.339 200.6 232.052 198.967 231.447C200.6 230.843 201.887 229.555 202.492 227.922C203.096 229.555 204.384 230.843 206.017 231.447Z'
fill='url(#paint92_linear_2135_4461)'
/>
<path
d='M206.017 202.072C204.384 202.677 203.096 203.964 202.492 205.597C201.887 203.964 200.6 202.677 198.967 202.072C200.6 201.468 201.887 200.18 202.492 198.547C203.096 200.18 204.384 201.468 206.017 202.072Z'
fill='url(#paint93_linear_2135_4461)'
/>
<path
d='M206.017 172.697C204.384 173.302 203.096 174.589 202.492 176.222C201.887 174.589 200.6 173.302 198.967 172.697C200.6 172.093 201.887 170.805 202.492 169.172C203.096 170.805 204.384 172.093 206.017 172.697Z'
fill='url(#paint94_linear_2135_4461)'
/>
<path
d='M206.017 113.947C204.384 114.552 203.096 115.839 202.492 117.472C201.887 115.839 200.6 114.552 198.967 113.947C200.6 113.343 201.887 112.055 202.492 110.422C203.096 112.055 204.384 113.343 206.017 113.947Z'
fill='url(#paint95_linear_2135_4461)'
/>
<path
d='M206.017 143.322C204.384 143.927 203.096 145.214 202.492 146.847C201.887 145.214 200.6 143.927 198.967 143.322C200.6 142.718 201.887 141.43 202.492 139.797C203.096 141.43 204.384 142.718 206.017 143.322Z'
fill='url(#paint96_linear_2135_4461)'
/>
<path
d='M206.017 84.5723C204.384 85.1766 203.096 86.4642 202.492 88.0973C201.887 86.4642 200.6 85.1766 198.967 84.5723C200.6 83.968 201.887 82.6804 202.492 81.0473C203.096 82.6804 204.384 83.968 206.017 84.5723Z'
fill='url(#paint97_linear_2135_4461)'
/>
<path
d='M206.017 55.1973C204.384 55.8016 203.096 57.0892 202.492 58.7223C201.887 57.0892 200.6 55.8016 198.967 55.1973C200.6 54.593 201.887 53.3054 202.492 51.6723C203.096 53.3054 204.384 54.593 206.017 55.1973Z'
fill='url(#paint98_linear_2135_4461)'
/>
<path
d='M206.017 25.8221C204.384 26.4264 203.096 27.714 202.492 29.3471C201.887 27.714 200.6 26.4264 198.967 25.8221C200.6 25.2178 201.887 23.9302 202.492 22.2971C203.096 23.9302 204.384 25.2178 206.017 25.8221Z'
fill='url(#paint99_linear_2135_4461)'
/>
<path
d='M235.392 290.197C233.759 290.802 232.471 292.089 231.867 293.722C231.262 292.089 229.975 290.802 228.342 290.197C229.975 289.593 231.262 288.305 231.867 286.672C232.471 288.305 233.759 289.593 235.392 290.197Z'
fill='url(#paint100_linear_2135_4461)'
/>
<path
d='M235.392 319.572C233.759 320.177 232.471 321.464 231.867 323.097C231.262 321.464 229.975 320.177 228.342 319.572C229.975 318.968 231.262 317.68 231.867 316.047C232.471 317.68 233.759 318.968 235.392 319.572Z'
fill='url(#paint101_linear_2135_4461)'
/>
<path
d='M235.392 260.822C233.759 261.427 232.471 262.714 231.867 264.347C231.262 262.714 229.975 261.427 228.342 260.822C229.975 260.218 231.262 258.93 231.867 257.297C232.471 258.93 233.759 260.218 235.392 260.822Z'
fill='url(#paint102_linear_2135_4461)'
/>
<path
d='M235.392 231.447C233.759 232.052 232.471 233.339 231.867 234.972C231.262 233.339 229.975 232.052 228.342 231.447C229.975 230.843 231.262 229.555 231.867 227.922C232.471 229.555 233.759 230.843 235.392 231.447Z'
fill='url(#paint103_linear_2135_4461)'
/>
<path
d='M235.392 202.072C233.759 202.677 232.471 203.964 231.867 205.597C231.262 203.964 229.975 202.677 228.342 202.072C229.975 201.468 231.262 200.18 231.867 198.547C232.471 200.18 233.759 201.468 235.392 202.072Z'
fill='url(#paint104_linear_2135_4461)'
/>
<path
d='M235.392 172.697C233.759 173.302 232.471 174.589 231.867 176.222C231.262 174.589 229.975 173.302 228.342 172.697C229.975 172.093 231.262 170.805 231.867 169.172C232.471 170.805 233.759 172.093 235.392 172.697Z'
fill='url(#paint105_linear_2135_4461)'
/>
<path
d='M235.392 113.947C233.759 114.552 232.471 115.839 231.867 117.472C231.262 115.839 229.975 114.552 228.342 113.947C229.975 113.343 231.262 112.055 231.867 110.422C232.471 112.055 233.759 113.343 235.392 113.947Z'
fill='url(#paint106_linear_2135_4461)'
/>
<path
d='M235.392 143.322C233.759 143.927 232.471 145.214 231.867 146.847C231.262 145.214 229.975 143.927 228.342 143.322C229.975 142.718 231.262 141.43 231.867 139.797C232.471 141.43 233.759 142.718 235.392 143.322Z'
fill='url(#paint107_linear_2135_4461)'
/>
<path
d='M235.392 84.5723C233.759 85.1766 232.471 86.4642 231.867 88.0973C231.262 86.4642 229.975 85.1766 228.342 84.5723C229.975 83.968 231.262 82.6804 231.867 81.0473C232.471 82.6804 233.759 83.968 235.392 84.5723Z'
fill='url(#paint108_linear_2135_4461)'
/>
<path
d='M235.392 55.1973C233.759 55.8016 232.471 57.0892 231.867 58.7223C231.262 57.0892 229.975 55.8016 228.342 55.1973C229.975 54.593 231.262 53.3054 231.867 51.6723C232.471 53.3054 233.759 54.593 235.392 55.1973Z'
fill='url(#paint109_linear_2135_4461)'
/>
<path
d='M235.392 25.8221C233.759 26.4264 232.471 27.714 231.867 29.3471C231.262 27.714 229.975 26.4264 228.342 25.8221C229.975 25.2178 231.262 23.9302 231.867 22.2971C232.471 23.9302 233.759 25.2178 235.392 25.8221Z'
fill='url(#paint110_linear_2135_4461)'
/>
<path
d='M264.767 290.197C263.134 290.802 261.846 292.089 261.242 293.722C260.637 292.089 259.35 290.802 257.717 290.197C259.35 289.593 260.637 288.305 261.242 286.672C261.846 288.305 263.134 289.593 264.767 290.197Z'
fill='url(#paint111_linear_2135_4461)'
/>
<path
d='M264.767 319.572C263.134 320.177 261.846 321.464 261.242 323.097C260.637 321.464 259.35 320.177 257.717 319.572C259.35 318.968 260.637 317.68 261.242 316.047C261.846 317.68 263.134 318.968 264.767 319.572Z'
fill='url(#paint112_linear_2135_4461)'
/>
<path
d='M264.767 260.822C263.134 261.427 261.846 262.714 261.242 264.347C260.637 262.714 259.35 261.427 257.717 260.822C259.35 260.218 260.637 258.93 261.242 257.297C261.846 258.93 263.134 260.218 264.767 260.822Z'
fill='url(#paint113_linear_2135_4461)'
/>
<path
d='M264.767 231.447C263.134 232.052 261.846 233.339 261.242 234.972C260.637 233.339 259.35 232.052 257.717 231.447C259.35 230.843 260.637 229.555 261.242 227.922C261.846 229.555 263.134 230.843 264.767 231.447Z'
fill='url(#paint114_linear_2135_4461)'
/>
<path
d='M264.767 202.072C263.134 202.677 261.846 203.964 261.242 205.597C260.637 203.964 259.35 202.677 257.717 202.072C259.35 201.468 260.637 200.18 261.242 198.547C261.846 200.18 263.134 201.468 264.767 202.072Z'
fill='url(#paint115_linear_2135_4461)'
/>
<path
d='M264.767 172.697C263.134 173.302 261.846 174.589 261.242 176.222C260.637 174.589 259.35 173.302 257.717 172.697C259.35 172.093 260.637 170.805 261.242 169.172C261.846 170.805 263.134 172.093 264.767 172.697Z'
fill='url(#paint116_linear_2135_4461)'
/>
<path
d='M264.767 113.947C263.134 114.552 261.846 115.839 261.242 117.472C260.637 115.839 259.35 114.552 257.717 113.947C259.35 113.343 260.637 112.055 261.242 110.422C261.846 112.055 263.134 113.343 264.767 113.947Z'
fill='url(#paint117_linear_2135_4461)'
/>
<path
d='M264.767 143.322C263.134 143.927 261.846 145.214 261.242 146.847C260.637 145.214 259.35 143.927 257.717 143.322C259.35 142.718 260.637 141.43 261.242 139.797C261.846 141.43 263.134 142.718 264.767 143.322Z'
fill='url(#paint118_linear_2135_4461)'
/>
<path
d='M264.767 84.5723C263.134 85.1766 261.846 86.4642 261.242 88.0973C260.637 86.4642 259.35 85.1766 257.717 84.5723C259.35 83.968 260.637 82.6804 261.242 81.0473C261.846 82.6804 263.134 83.968 264.767 84.5723Z'
fill='url(#paint119_linear_2135_4461)'
/>
<path
d='M264.767 55.1973C263.134 55.8016 261.846 57.0892 261.242 58.7223C260.637 57.0892 259.35 55.8016 257.717 55.1973C259.35 54.593 260.637 53.3054 261.242 51.6723C261.846 53.3054 263.134 54.593 264.767 55.1973Z'
fill='url(#paint120_linear_2135_4461)'
/>
<path
d='M264.767 25.8221C263.134 26.4264 261.846 27.714 261.242 29.3471C260.637 27.714 259.35 26.4264 257.717 25.8221C259.35 25.2178 260.637 23.9302 261.242 22.2971C261.846 23.9302 263.134 25.2178 264.767 25.8221Z'
fill='url(#paint121_linear_2135_4461)'
/>
<path
d='M294.142 290.197C292.509 290.802 291.221 292.089 290.617 293.722C290.012 292.089 288.725 290.802 287.092 290.197C288.725 289.593 290.012 288.305 290.617 286.672C291.221 288.305 292.509 289.593 294.142 290.197Z'
fill='url(#paint122_linear_2135_4461)'
/>
<path
d='M294.142 319.572C292.509 320.177 291.221 321.464 290.617 323.097C290.012 321.464 288.725 320.177 287.092 319.572C288.725 318.968 290.012 317.68 290.617 316.047C291.221 317.68 292.509 318.968 294.142 319.572Z'
fill='url(#paint123_linear_2135_4461)'
/>
<path
d='M294.142 260.822C292.509 261.427 291.221 262.714 290.617 264.347C290.012 262.714 288.725 261.427 287.092 260.822C288.725 260.218 290.012 258.93 290.617 257.297C291.221 258.93 292.509 260.218 294.142 260.822Z'
fill='url(#paint124_linear_2135_4461)'
/>
<path
d='M294.142 231.447C292.509 232.052 291.221 233.339 290.617 234.972C290.012 233.339 288.725 232.052 287.092 231.447C288.725 230.843 290.012 229.555 290.617 227.922C291.221 229.555 292.509 230.843 294.142 231.447Z'
fill='url(#paint125_linear_2135_4461)'
/>
<path
d='M294.142 202.072C292.509 202.677 291.221 203.964 290.617 205.597C290.012 203.964 288.725 202.677 287.092 202.072C288.725 201.468 290.012 200.18 290.617 198.547C291.221 200.18 292.509 201.468 294.142 202.072Z'
fill='url(#paint126_linear_2135_4461)'
/>
<path
d='M294.142 172.697C292.509 173.302 291.221 174.589 290.617 176.222C290.012 174.589 288.725 173.302 287.092 172.697C288.725 172.093 290.012 170.805 290.617 169.172C291.221 170.805 292.509 172.093 294.142 172.697Z'
fill='url(#paint127_linear_2135_4461)'
/>
<path
d='M294.142 113.947C292.509 114.552 291.221 115.839 290.617 117.472C290.012 115.839 288.725 114.552 287.092 113.947C288.725 113.343 290.012 112.055 290.617 110.422C291.221 112.055 292.509 113.343 294.142 113.947Z'
fill='url(#paint128_linear_2135_4461)'
/>
<path
d='M294.142 143.322C292.509 143.927 291.221 145.214 290.617 146.847C290.012 145.214 288.725 143.927 287.092 143.322C288.725 142.718 290.012 141.43 290.617 139.797C291.221 141.43 292.509 142.718 294.142 143.322Z'
fill='url(#paint129_linear_2135_4461)'
/>
<path
d='M294.142 84.5723C292.509 85.1766 291.221 86.4642 290.617 88.0973C290.012 86.4642 288.725 85.1766 287.092 84.5723C288.725 83.968 290.012 82.6804 290.617 81.0473C291.221 82.6804 292.509 83.968 294.142 84.5723Z'
fill='url(#paint130_linear_2135_4461)'
/>
<path
d='M294.142 55.1973C292.509 55.8016 291.221 57.0892 290.617 58.7223C290.012 57.0892 288.725 55.8016 287.092 55.1973C288.725 54.593 290.012 53.3054 290.617 51.6723C291.221 53.3054 292.509 54.593 294.142 55.1973Z'
fill='url(#paint131_linear_2135_4461)'
/>
<path
d='M294.142 25.8221C292.509 26.4264 291.221 27.714 290.617 29.3471C290.012 27.714 288.725 26.4264 287.092 25.8221C288.725 25.2178 290.012 23.9302 290.617 22.2971C291.221 23.9302 292.509 25.2178 294.142 25.8221Z'
fill='url(#paint132_linear_2135_4461)'
/>
<path
d='M323.517 290.197C321.884 290.802 320.596 292.089 319.992 293.722C319.387 292.089 318.1 290.802 316.467 290.197C318.1 289.593 319.387 288.305 319.992 286.672C320.596 288.305 321.884 289.593 323.517 290.197Z'
fill='url(#paint133_linear_2135_4461)'
/>
<path
d='M323.517 319.572C321.884 320.177 320.596 321.464 319.992 323.097C319.387 321.464 318.1 320.177 316.467 319.572C318.1 318.968 319.387 317.68 319.992 316.047C320.596 317.68 321.884 318.968 323.517 319.572Z'
fill='url(#paint134_linear_2135_4461)'
/>
<path
d='M323.517 260.822C321.884 261.427 320.596 262.714 319.992 264.347C319.387 262.714 318.1 261.427 316.467 260.822C318.1 260.218 319.387 258.93 319.992 257.297C320.596 258.93 321.884 260.218 323.517 260.822Z'
fill='url(#paint135_linear_2135_4461)'
/>
<path
d='M323.517 231.447C321.884 232.052 320.596 233.339 319.992 234.972C319.387 233.339 318.1 232.052 316.467 231.447C318.1 230.843 319.387 229.555 319.992 227.922C320.596 229.555 321.884 230.843 323.517 231.447Z'
fill='url(#paint136_linear_2135_4461)'
/>
<path
d='M323.517 202.072C321.884 202.677 320.596 203.964 319.992 205.597C319.387 203.964 318.1 202.677 316.467 202.072C318.1 201.468 319.387 200.18 319.992 198.547C320.596 200.18 321.884 201.468 323.517 202.072Z'
fill='url(#paint137_linear_2135_4461)'
/>
<path
d='M323.517 172.697C321.884 173.302 320.596 174.589 319.992 176.222C319.387 174.589 318.1 173.302 316.467 172.697C318.1 172.093 319.387 170.805 319.992 169.172C320.596 170.805 321.884 172.093 323.517 172.697Z'
fill='url(#paint138_linear_2135_4461)'
/>
<path
d='M323.517 113.947C321.884 114.552 320.596 115.839 319.992 117.472C319.387 115.839 318.1 114.552 316.467 113.947C318.1 113.343 319.387 112.055 319.992 110.422C320.596 112.055 321.884 113.343 323.517 113.947Z'
fill='url(#paint139_linear_2135_4461)'
/>
<path
d='M323.517 143.322C321.884 143.927 320.596 145.214 319.992 146.847C319.387 145.214 318.1 143.927 316.467 143.322C318.1 142.718 319.387 141.43 319.992 139.797C320.596 141.43 321.884 142.718 323.517 143.322Z'
fill='url(#paint140_linear_2135_4461)'
/>
<path
d='M323.517 84.5723C321.884 85.1766 320.596 86.4642 319.992 88.0973C319.387 86.4642 318.1 85.1766 316.467 84.5723C318.1 83.968 319.387 82.6804 319.992 81.0473C320.596 82.6804 321.884 83.968 323.517 84.5723Z'
fill='url(#paint141_linear_2135_4461)'
/>
<path
d='M323.517 55.1973C321.884 55.8016 320.596 57.0892 319.992 58.7223C319.387 57.0892 318.1 55.8016 316.467 55.1973C318.1 54.593 319.387 53.3054 319.992 51.6723C320.596 53.3054 321.884 54.593 323.517 55.1973Z'
fill='url(#paint142_linear_2135_4461)'
/>
<path
d='M323.517 25.8221C321.884 26.4264 320.596 27.714 319.992 29.3471C319.387 27.714 318.1 26.4264 316.467 25.8221C318.1 25.2178 319.387 23.9302 319.992 22.2971C320.596 23.9302 321.884 25.2178 323.517 25.8221Z'
fill='url(#paint143_linear_2135_4461)'
/>
<path
d='M352.892 290.197C351.259 290.802 349.971 292.089 349.367 293.722C348.762 292.089 347.475 290.802 345.842 290.197C347.475 289.593 348.762 288.305 349.367 286.672C349.971 288.305 351.259 289.593 352.892 290.197Z'
fill='url(#paint144_linear_2135_4461)'
/>
<path
d='M352.892 319.572C351.259 320.177 349.971 321.464 349.367 323.097C348.762 321.464 347.475 320.177 345.842 319.572C347.475 318.968 348.762 317.68 349.367 316.047C349.971 317.68 351.259 318.968 352.892 319.572Z'
fill='url(#paint145_linear_2135_4461)'
/>
<path
d='M352.892 260.822C351.259 261.427 349.971 262.714 349.367 264.347C348.762 262.714 347.475 261.427 345.842 260.822C347.475 260.218 348.762 258.93 349.367 257.297C349.971 258.93 351.259 260.218 352.892 260.822Z'
fill='url(#paint146_linear_2135_4461)'
/>
<path
d='M352.892 231.447C351.259 232.052 349.971 233.339 349.367 234.972C348.762 233.339 347.475 232.052 345.842 231.447C347.475 230.843 348.762 229.555 349.367 227.922C349.971 229.555 351.259 230.843 352.892 231.447Z'
fill='url(#paint147_linear_2135_4461)'
/>
<path
d='M352.892 202.072C351.259 202.677 349.971 203.964 349.367 205.597C348.762 203.964 347.475 202.677 345.842 202.072C347.475 201.468 348.762 200.18 349.367 198.547C349.971 200.18 351.259 201.468 352.892 202.072Z'
fill='url(#paint148_linear_2135_4461)'
/>
<path
d='M352.892 172.697C351.259 173.302 349.971 174.589 349.367 176.222C348.762 174.589 347.475 173.302 345.842 172.697C347.475 172.093 348.762 170.805 349.367 169.172C349.971 170.805 351.259 172.093 352.892 172.697Z'
fill='url(#paint149_linear_2135_4461)'
/>
<path
d='M352.892 113.947C351.259 114.552 349.971 115.839 349.367 117.472C348.762 115.839 347.475 114.552 345.842 113.947C347.475 113.343 348.762 112.055 349.367 110.422C349.971 112.055 351.259 113.343 352.892 113.947Z'
fill='url(#paint150_linear_2135_4461)'
/>
<path
d='M352.892 143.322C351.259 143.927 349.971 145.214 349.367 146.847C348.762 145.214 347.475 143.927 345.842 143.322C347.475 142.718 348.762 141.43 349.367 139.797C349.971 141.43 351.259 142.718 352.892 143.322Z'
fill='url(#paint151_linear_2135_4461)'
/>
<path
d='M352.892 84.5723C351.259 85.1766 349.971 86.4642 349.367 88.0973C348.762 86.4642 347.475 85.1766 345.842 84.5723C347.475 83.968 348.762 82.6804 349.367 81.0473C349.971 82.6804 351.259 83.968 352.892 84.5723Z'
fill='url(#paint152_linear_2135_4461)'
/>
<path
d='M352.892 55.1973C351.259 55.8016 349.971 57.0892 349.367 58.7223C348.762 57.0892 347.475 55.8016 345.842 55.1973C347.475 54.593 348.762 53.3054 349.367 51.6723C349.971 53.3054 351.259 54.593 352.892 55.1973Z'
fill='url(#paint
gitextract_3ev1jqlw/ ├── .gitignore ├── LICENSE ├── README.md ├── next.config.js ├── package.json ├── postcss.config.js ├── prisma/ │ └── schema.prisma ├── prisma.config.ts ├── src/ │ ├── app/ │ │ ├── (site)/ │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ └── providers.tsx │ │ ├── layout.tsx │ │ └── not-found.tsx │ ├── components/ │ │ ├── 404/ │ │ │ └── index.tsx │ │ ├── Blog/ │ │ │ └── BlogItem.tsx │ │ ├── Common/ │ │ │ ├── Breadcrumb.tsx │ │ │ ├── Breadcrumbs.tsx │ │ │ ├── PreLoader.tsx │ │ │ ├── SectionHeader.tsx │ │ │ └── SectionTitleH2.tsx │ │ ├── Footer/ │ │ │ └── index.tsx │ │ ├── Header/ │ │ │ ├── Dropdown.tsx │ │ │ ├── ThemeSwitcher.tsx │ │ │ ├── index.tsx │ │ │ └── menuData.ts │ │ └── Home/ │ │ ├── Blog/ │ │ │ └── index.tsx │ │ ├── CallToAction/ │ │ │ └── index.tsx │ │ ├── Counter/ │ │ │ ├── CountUp.tsx │ │ │ └── index.tsx │ │ ├── FAQ/ │ │ │ ├── FaqItem.tsx │ │ │ ├── faqData.ts │ │ │ └── index.tsx │ │ ├── Features/ │ │ │ ├── FeatureItem.tsx │ │ │ ├── featuresData.ts │ │ │ └── index.tsx │ │ ├── FeaturesWithImage/ │ │ │ ├── FeatureItem.tsx │ │ │ ├── featuresData.ts │ │ │ └── index.tsx │ │ ├── Hero/ │ │ │ ├── Brand.tsx │ │ │ ├── brandData.tsx │ │ │ └── index.tsx │ │ ├── Newsletter/ │ │ │ ├── Graphics.tsx │ │ │ └── index.tsx │ │ ├── Pricing/ │ │ │ ├── PriceItem.tsx │ │ │ └── index.tsx │ │ ├── Testimonials/ │ │ │ ├── TestimonialItem.tsx │ │ │ ├── index.tsx │ │ │ └── testmonialsData.ts │ │ └── index.tsx │ ├── libs/ │ │ └── scrollActive.js │ ├── pricing/ │ │ └── pricingData.ts │ ├── styles/ │ │ ├── globals.css │ │ └── satoshi.css │ └── types/ │ ├── blog.ts │ ├── faq.ts │ ├── featureItem.ts │ ├── featureWithImg.ts │ ├── menu.ts │ ├── priceItem.ts │ └── testimonial.ts └── tsconfig.json
SYMBOL INDEX (24 symbols across 21 files)
FILE: src/app/(site)/layout.tsx
function RootLayout (line 10) | function RootLayout({
FILE: src/app/(site)/page.tsx
function HomePage (line 23) | function HomePage() {
FILE: src/app/(site)/providers.tsx
function Providers (line 5) | function Providers({ children }: { children: React.ReactNode }) {
FILE: src/app/not-found.tsx
function NotFoundPage (line 3) | function NotFoundPage() {
FILE: src/components/Common/Breadcrumb.tsx
function Breadcrumb (line 3) | function Breadcrumb({ pageTitle }: { pageTitle: string }) {
FILE: src/components/Common/SectionTitleH2.tsx
type PropsType (line 1) | type PropsType = {
function SectionTitleH2 (line 12) | function SectionTitleH2(props: PropsType) {
FILE: src/components/Header/ThemeSwitcher.tsx
function ThemeSwitcher (line 3) | function ThemeSwitcher() {
FILE: src/components/Home/Counter/CountUp.tsx
type CountUpProps (line 4) | interface CountUpProps {
FILE: src/components/Home/FAQ/FaqItem.tsx
type PropsType (line 2) | type PropsType = {
function FaqItem (line 12) | function FaqItem({
FILE: src/components/Home/Hero/brandData.tsx
type Brand (line 2) | type Brand = {
FILE: src/components/Home/Newsletter/Graphics.tsx
function Graphics (line 1) | function Graphics() {
FILE: src/components/Home/Newsletter/index.tsx
function Newsletter (line 3) | function Newsletter() {
FILE: src/components/Home/Pricing/PriceItem.tsx
type Props (line 5) | type Props = {
FILE: src/libs/scrollActive.js
function onScroll (line 32) | function onScroll() {
FILE: src/types/blog.ts
type Blog (line 1) | type Blog = {
FILE: src/types/faq.ts
type Faq (line 1) | type Faq = {
FILE: src/types/featureItem.ts
type FeatureItem (line 1) | type FeatureItem = {
FILE: src/types/featureWithImg.ts
type FeatureWithImg (line 1) | type FeatureWithImg = {
FILE: src/types/menu.ts
type Menu (line 1) | type Menu = {
type Submenu (line 9) | type Submenu = {
FILE: src/types/priceItem.ts
type Price (line 1) | type Price = {
FILE: src/types/testimonial.ts
type Testimonial (line 1) | type Testimonial = {
Condensed preview — 61 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (414K chars).
[
{
"path": ".gitignore",
"chars": 372,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 3600,
"preview": "# SaaSBold Lite\n\nSaaSBold is a **full-stack SaaS boilerplate** for Next.js - crafted with great attention to both front-"
},
{
"path": "next.config.js",
"chars": 510,
"preview": "/** @type {import('next').NextConfig} */\n\nconst nextConfig = {\n\timages: {\n\t\tremotePatterns: [\n\t\t\t{\n\t\t\t\tprotocol: \"https\""
},
{
"path": "package.json",
"chars": 1535,
"preview": "{\n \"name\": \"saasbold-lite\",\n \"version\": \"1.2.1\",\n \"private\": true,\n \"engines\": {\n \"node\": \">=20\"\n },\n \"scripts\""
},
{
"path": "postcss.config.js",
"chars": 68,
"preview": "module.exports = {\n\tplugins: {\n\t\t\"@tailwindcss/postcss\": {},\n\t},\n};\n"
},
{
"path": "prisma/schema.prisma",
"chars": 2279,
"preview": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ndatasource db {"
},
{
"path": "prisma.config.ts",
"chars": 262,
"preview": "import 'dotenv/config'\nimport { defineConfig, env } from 'prisma/config';\n\nexport default defineConfig({\n schema: 'pr"
},
{
"path": "src/app/(site)/layout.tsx",
"chars": 703,
"preview": "import \"../../styles/globals.css\";\nimport \"../../styles/satoshi.css\";\nimport \"../../styles/globals.css\";\nimport Header f"
},
{
"path": "src/app/(site)/page.tsx",
"chars": 1448,
"preview": "import Home from \"@/components/Home\";\nimport { Metadata } from \"next\";\n\nexport const metadata: Metadata = {\n\ttitle: `Ful"
},
{
"path": "src/app/(site)/providers.tsx",
"chars": 270,
"preview": "\"use client\";\n\nimport { ThemeProvider } from \"next-themes\";\n\nexport function Providers({ children }: { children: React.R"
},
{
"path": "src/app/layout.tsx",
"chars": 442,
"preview": "import \"../styles/globals.css\";\nimport \"../styles/satoshi.css\";\nimport { Inter } from \"next/font/google\";\nconst inter = "
},
{
"path": "src/app/not-found.tsx",
"chars": 107,
"preview": "import NotFound from \"@/components/404\";\n\nexport default function NotFoundPage() {\n\treturn <NotFound />;\n}\n"
},
{
"path": "src/components/404/index.tsx",
"chars": 4024,
"preview": "import Image from \"next/image\";\nimport Link from \"next/link\";\nimport React from \"react\";\n\nconst NotFound = () => {\n\tretu"
},
{
"path": "src/components/Blog/BlogItem.tsx",
"chars": 6959,
"preview": "import React from \"react\";\nimport { Blog } from \"@/types/blog\";\nimport Image from \"next/image\";\nimport Link from \"next/l"
},
{
"path": "src/components/Common/Breadcrumb.tsx",
"chars": 980,
"preview": "import Link from \"next/link\";\n\nexport default function Breadcrumb({ pageTitle }: { pageTitle: string }) {\n\treturn (\n\t\t<s"
},
{
"path": "src/components/Common/Breadcrumbs.tsx",
"chars": 651,
"preview": "import Link from \"next/link\";\nimport React from \"react\";\n\nconst Breadcrumbs = ({ title, pages }: { title: string; pages:"
},
{
"path": "src/components/Common/PreLoader.tsx",
"chars": 563,
"preview": "\"use client\";\nimport { useEffect, useState } from \"react\";\n\nconst Loader = () => {\n const [loading, setLoading] = useSt"
},
{
"path": "src/components/Common/SectionHeader.tsx",
"chars": 537,
"preview": "import React from \"react\";\n\nconst SectionHeader = ({\n\ttitle,\n\tdescription,\n}: {\n\ttitle: string;\n\tdescription: string;\n})"
},
{
"path": "src/components/Common/SectionTitleH2.tsx",
"chars": 920,
"preview": "type PropsType = {\n\ttitle: string;\n\tcenter?: boolean;\n\tlargePara?: boolean;\n\tparagraph: string;\n\twidth?: string;\n\tparaWi"
},
{
"path": "src/components/Footer/index.tsx",
"chars": 8629,
"preview": "import React from \"react\";\nimport Image from \"next/image\";\n\nconst Footer = () => {\n\treturn (\n\t\t<footer className='relati"
},
{
"path": "src/components/Header/Dropdown.tsx",
"chars": 2017,
"preview": "import { Menu } from \"@/types/menu\";\nimport Link from \"next/link\";\nimport { useState } from \"react\";\nimport { usePathnam"
},
{
"path": "src/components/Header/ThemeSwitcher.tsx",
"chars": 3989,
"preview": "import { useTheme } from \"next-themes\";\n\nexport default function ThemeSwitcher() {\n\tconst { theme, setTheme } = useTheme"
},
{
"path": "src/components/Header/index.tsx",
"chars": 6636,
"preview": "\"use client\";\nimport logoLight from \"@/../public/images/logo/logo-light.svg\";\nimport logo from \"@/../public/images/logo/"
},
{
"path": "src/components/Header/menuData.ts",
"chars": 425,
"preview": "import { Menu } from \"@/types/menu\";\n\nexport const menuData: Menu[] = [\n {\n id: 1,\n title: \"Features\",\n newTab"
},
{
"path": "src/components/Home/Blog/index.tsx",
"chars": 2218,
"preview": "import BlogItem from '@/components/Blog/BlogItem';\nimport SectionHeader from '@/components/Common/SectionHeader';\nimport"
},
{
"path": "src/components/Home/CallToAction/index.tsx",
"chars": 1912,
"preview": "import Image from \"next/image\";\nimport Link from \"next/link\";\nconst CallToAction = () => {\n return (\n <section class"
},
{
"path": "src/components/Home/Counter/CountUp.tsx",
"chars": 1411,
"preview": "// CountUp.tsx\nimport React, { useEffect, useState, useRef } from \"react\";\n\ninterface CountUpProps {\n\ttargetNumber: numb"
},
{
"path": "src/components/Home/Counter/index.tsx",
"chars": 2226,
"preview": "\"use client\";\nimport React from \"react\";\nimport CountUp from \"./CountUp\";\n\nconst Counter = () => {\n\treturn (\n\t\t<section "
},
{
"path": "src/components/Home/FAQ/FaqItem.tsx",
"chars": 1740,
"preview": "\ntype PropsType = {\n\tfaq: {\n\t\tid: number | string;\n\t\tquestion: string;\n\t\tanswer: string;\n\t};\n\thandleFaqToggle: (id: numb"
},
{
"path": "src/components/Home/FAQ/faqData.ts",
"chars": 958,
"preview": "import { Faq } from \"@/types/faq\";\n\nconst faqData: Faq[] = [\n\t{\n\t\tid: 1,\n\t\tquestion: \"Does this app offer a free trial p"
},
{
"path": "src/components/Home/FAQ/index.tsx",
"chars": 1122,
"preview": "\"use client\";\nimport React, { useState } from \"react\";\nimport faqData from \"./faqData\";\nimport FaqItem from \"./FaqItem\";"
},
{
"path": "src/components/Home/Features/FeatureItem.tsx",
"chars": 573,
"preview": "import type { FeatureItem } from '@/types/featureItem';\nimport Image from 'next/image';\n\nconst FeatureItem = ({ data }: "
},
{
"path": "src/components/Home/Features/featuresData.ts",
"chars": 3140,
"preview": "// import { FeatureItem } from \"@/types/featureItem\";\n\n// const featuresData: FeatureItem[] = [\n// \t{\n// \t\ttitle: \"Intui"
},
{
"path": "src/components/Home/Features/index.tsx",
"chars": 1470,
"preview": "import React from \"react\";\nimport featuresData from \"./featuresData\";\nimport FeatureItem from \"./FeatureItem\";\nimport Se"
},
{
"path": "src/components/Home/FeaturesWithImage/FeatureItem.tsx",
"chars": 1872,
"preview": "import { FeatureWithImg } from \"@/types/featureWithImg\";\nimport Image from \"next/image\";\nimport React from \"react\";\n\ncon"
},
{
"path": "src/components/Home/FeaturesWithImage/featuresData.ts",
"chars": 916,
"preview": "import { FeatureWithImg } from \"@/types/featureWithImg\";\n\nconst featureItemData: FeatureWithImg[] = [\n\t{\n\t\ttitle: \"Build"
},
{
"path": "src/components/Home/FeaturesWithImage/index.tsx",
"chars": 821,
"preview": "import { FeatureWithImg } from \"@/types/featureWithImg\";\nimport featureItemData from \"./featuresData\";\nimport FeatureIte"
},
{
"path": "src/components/Home/Hero/Brand.tsx",
"chars": 0,
"preview": ""
},
{
"path": "src/components/Home/Hero/brandData.tsx",
"chars": 44451,
"preview": "import type { JSX } from \"react\";\ntype Brand = {\n\tid: number;\n\tname: string;\n\tlink: string;\n\timage: JSX.Element;\n};\n\ncon"
},
{
"path": "src/components/Home/Hero/index.tsx",
"chars": 3819,
"preview": "import Image from \"next/image\";\nimport React from \"react\";\nimport brandData from \"./brandData\";\nimport Link from \"next/l"
},
{
"path": "src/components/Home/Newsletter/Graphics.tsx",
"chars": 177269,
"preview": "export default function Graphics() {\n\treturn (\n\t\t<>\n\t\t\t<div className='absolute right-0 top-0 -z-10 dark:opacity-10'>\n\t\t"
},
{
"path": "src/components/Home/Newsletter/index.tsx",
"chars": 1814,
"preview": "import Graphics from \"./Graphics\";\n\nexport default function Newsletter() {\n return (\n <section className=\"relative z"
},
{
"path": "src/components/Home/Pricing/PriceItem.tsx",
"chars": 4081,
"preview": "\"use client\";\nimport { Price } from \"@/types/priceItem\";\nimport Image from \"next/image\";\n\ntype Props = {\n plan: Price;\n"
},
{
"path": "src/components/Home/Pricing/index.tsx",
"chars": 1048,
"preview": "\"use client\";\nimport React, { useEffect, useState, useRef } from \"react\";\nimport SectionHeader from \"@/components/Common"
},
{
"path": "src/components/Home/Testimonials/TestimonialItem.tsx",
"chars": 926,
"preview": "import { Testimonial } from \"@/types/testimonial\";\nimport Image from \"next/image\";\n\nconst TestimonialItem = ({ data }: {"
},
{
"path": "src/components/Home/Testimonials/index.tsx",
"chars": 1132,
"preview": "import SectionHeader from \"@/components/Common/SectionHeader\";\nimport TestimonialItem from \"./TestimonialItem\";\nimport t"
},
{
"path": "src/components/Home/Testimonials/testmonialsData.ts",
"chars": 1879,
"preview": "import { Testimonial } from \"@/types/testimonial\";\n\nconst testimonialData: Testimonial[][] = [\n\t[\n\t\t{\n\t\t\tid: 1,\n\t\t\tname:"
},
{
"path": "src/components/Home/index.tsx",
"chars": 593,
"preview": "import Hero from \"./Hero\";\nimport Features from \"./Features\";\nimport FeaturesWithImage from \"./FeaturesWithImage\";\nimpor"
},
{
"path": "src/libs/scrollActive.js",
"chars": 1767,
"preview": "// export function onScroll() {\n// \tif (typeof window === \"undefined\") {\n// \t\treturn;\n// \t}\n\n// \tconst sections = docume"
},
{
"path": "src/pricing/pricingData.ts",
"chars": 1422,
"preview": "import { Price } from \"@/types/priceItem\";\n\nexport const pricingData: Price[] = [\n {\n stripePriceId: \"stripe_ID\",\n "
},
{
"path": "src/styles/globals.css",
"chars": 9671,
"preview": "@import url(\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\");\n\n@i"
},
{
"path": "src/styles/satoshi.css",
"chars": 3177,
"preview": "/**\n * @license\n *\n * Font Family: Satoshi\n * Designed by: Deni Anggara\n * URL: https://www.fontshare.com/fonts/satoshi\n"
},
{
"path": "src/types/blog.ts",
"chars": 160,
"preview": "export type Blog = {\n\t_id: number;\n\ttitle: string;\n\tslug?: any;\n\tmetadata: string;\n\tmainImage: any;\n\tauthor: string;\n\tta"
},
{
"path": "src/types/faq.ts",
"chars": 72,
"preview": "export type Faq = {\n\tid: number;\n\tquestion: string;\n\tanswer: string;\n};\n"
},
{
"path": "src/types/featureItem.ts",
"chars": 97,
"preview": "export type FeatureItem = {\n\tid: number;\n\ttitle: string;\n\tdescription: string;\n\ticon: string;\n};\n"
},
{
"path": "src/types/featureWithImg.ts",
"chars": 123,
"preview": "export type FeatureWithImg = {\n\tid: number;\n\ttitle: string;\n\tdescription: string;\n\tchecklist: string[];\n\timage: string;\n"
},
{
"path": "src/types/menu.ts",
"chars": 201,
"preview": "export type Menu = {\n\tid: number;\n\ttitle: string;\n\tnewTab?: boolean;\n\tpath?: string;\n\tsubmenu?: Submenu[];\n};\n\nexport ty"
},
{
"path": "src/types/priceItem.ts",
"chars": 344,
"preview": "export type Price = {\n\tstripePriceId?: string;\n\tstripeSubscriptionId?: string;\n\tstripeCurrentPeriodEnd?: Date;\n\tstripeCu"
},
{
"path": "src/types/testimonial.ts",
"chars": 105,
"preview": "export type Testimonial = {\n\tid: number;\n\tname: string;\n\trole: string;\n\timage: string;\n\ttext: string;\n};\n"
},
{
"path": "tsconfig.json",
"chars": 741,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"es5\",\n \"lib\": [\n \"dom\",\n \"dom.iterable\",\n \"esnext\"\n ],\n "
}
]
About this extraction
This page contains the full source code of the SaaSBold/saasbold-lite GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 61 files (349.9 KB), approximately 137.4k tokens, and a symbol index with 24 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.