The 100% Complete Toolkit: UI Design, ALL 50 CSS Libraries, CRM Automation, and Funnel Mockups.
Treat this as your standard operating procedure for your first month. Don't rush into code until Week 3.
{}, and paste the styles.Select a category. Replace #c-xxx in the code with your actual Element ID.
#c-xxx { background: linear-gradient(90deg, #ff8a00, #e52e71); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }#c-xxx { background-image: linear-gradient(120deg, #84fab0, #8fd3f4); background-size: 100% 0.2em; background-position: 0 88%; transition: 0.25s; } #c-xxx:hover { background-size: 100% 88%; }#c-xxx { overflow: hidden; border-right: .15em solid orange; white-space: nowrap; animation: typing 3.5s steps(30,end), blink-caret .5s step-end infinite; }#c-xxx { color: #fff; text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 20px #ff00de, 0 0 40px #ff00de; }#c-xxx { color: #ccc; text-shadow: 1px 1px 0 #999, 2px 2px 0 #888, 3px 3px 0 #777; }#c-xxx { background: linear-gradient(104deg, rgba(255,255,0,0) 0.9%, rgba(255,255,0,1) 2.4%, rgba(255,213,0,0.5) 5.8%, rgba(255,213,0,0.1) 93%, rgba(255,255,0,0) 96%); }/* Needs ::before/after pseudo elements, best used in custom HTML block */#c-xxx { color: transparent; -webkit-text-stroke: 1px #1565c0; }#c-xxx { transition: letter-spacing 0.3s; } #c-xxx:hover { letter-spacing: 5px; }#c-xxx { color: transparent; background: #333; transition: 0.3s; } #c-xxx:hover { color: #fff; }#c-xxx { animation: glow 1.5s infinite; } @keyframes glow { 0%, 100% { box-shadow: 0 0 5px #0f0; } 50% { box-shadow: 0 0 20px #0f0; } }#c-xxx { box-shadow: 5px 5px 10px #a3b1c6, -5px -5px 10px #fff; } #c-xxx:active { box-shadow: inset 5px 5px 10px #a3b1c6, inset -5px -5px 10px #fff; }#c-xxx { position: relative; z-index: 1; transition: 0.3s; border: 2px solid #1565c0; } #c-xxx:hover::before { width: 100%; } /* Requires ::before pseudo setup */#c-xxx { box-shadow: 0 5px #09316b; transition: 0.1s; } #c-xxx:active { transform: translateY(4px); box-shadow: 0 1px #09316b; }#c-xxx { animation: pulse 1.5s infinite; } @keyframes pulse { 70% { box-shadow: 0 0 0 10px rgba(21,101,192,0); } }#c-xxx { border: 2px solid transparent; border-image: linear-gradient(to right, #ff8a00, #e52e71) 1; }#c-xxx { background: transparent; border: 2px solid #333; color: #333; transition: 0.3s; } #c-xxx:hover { background: #333; color: #fff; }#c-xxx { transition: 0.3s; } #c-xxx:hover { transform: translateY(-5px); box-shadow: 0 10px 15px rgba(0,0,0,0.2); }#c-xxx:hover { animation: wobble 1s; } /* Requires wobble keyframes */#c-xxx { border-radius: 50px !important; padding: 15px 40px !important; }#c-xxx { background: rgba(255,255,255,0.2); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.3); }#c-xxx { transition: 0.3s; } #c-xxx:hover { transform: translateY(-10px); box-shadow: 0 15px 20px rgba(0,0,0,0.2); }#c-xxx { border: 2px solid transparent; transition: 0.3s; } #c-xxx:hover { border-color: #00ff00; box-shadow: 0 0 15px #00ff00; }#c-xxx { background: #1e1e1e !important; color: #fff !important; border: 1px solid #333; }#c-xxx { border-radius: 50%; border: 3px solid #1565c0; padding: 5px; }/* Use Custom HTML for exact pseudo element mapping */#c-xxx { animation: cfloat 4s ease-in-out infinite; } @keyframes cfloat { 50% { transform: translateY(-10px); } }#c-xxx { box-shadow: 0 20px 40px -14px rgba(0,0,0,0.15) !important; border: none !important; }#c-xxx { border: 1px solid #ccc; transition: 0.5s; } #c-xxx:hover { border-color: #1565c0; }/* Target Row/Column */ #c-xxx { border-radius: 50% !important; overflow: hidden; }#c-xxx { overflow: hidden !important; border-radius: 8px; } #c-xxx img { transition: transform 0.5s ease !important; } #c-xxx:hover img { transform: scale(1.3) !important; }.loader { border: 4px solid #f3f3f3; border-top: 4px solid #1565c0; border-radius: 50%; animation: spin 1s linear infinite; }#c-xxx:hover { animation: shake 0.5s; } @keyframes shake { 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } }#c-xxx { animation: bounce 2s infinite; } /* Keyframes needed */#c-xxx { animation: fadeUp 2s infinite; } @keyframes fadeUp { 0% { opacity: 0; transform: translateY(20px); } 100% { opacity: 1; transform: translateY(0); } }#c-xxx { animation: heartbeat 1.5s infinite; } @keyframes heartbeat { 50% { transform: scale(1.2); } }#c-xxx { transform-origin: top center; animation: swing 2s infinite; }#c-xxx { background: linear-gradient(90deg, #eee 25%, #ddd 50%, #eee 75%); background-size: 200% 100%; animation: loading 1.5s infinite; }#c-xxx { animation: pulseBg 2s infinite; } @keyframes pulseBg { 70% { box-shadow: 0 0 0 15px rgba(255, 152, 0, 0); } }#c-xxx { animation: spin 2s linear infinite; }#c-xxx { position: sticky !important; top: 0; z-index: 9999; }.ghl-form-wrap input:focus { border-color: #1565c0 !important; box-shadow: 0 0 8px rgba(21,101,192,0.4) !important; }@media only screen and (max-width: 767px) { #c-xxx { display: none !important; } }@media only screen and (min-width: 768px) { #c-xxx { display: none !important; } }#c-xxx { user-select: none; -webkit-user-select: none; }#c-xxx { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-thumb { background: #1565c0; border-radius: 5px; }#c-xxx { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }#c-xxx { backdrop-filter: blur(8px); background: rgba(0,0,0,0.5); }#c-xxx { min-height: 100vh !important; display: flex; flex-direction: column; justify-content: center; }Follow these exact phases for every single page you build to ensure professional quality.
As a GHL WebDev, you are building pages inside a CRM. You need to know how to pull CRM data into your web pages dynamically.
Type these exact brackets directly into any Text Element in the GHL Builder. Try the live simulator below to see how GHL dynamically updates the text when a real lead visits the page.
"Thanks for signing up, {{contact.first_name}}! We just sent an email to {{contact.email}}."
| Type this on the page... | What it displays live... |
|---|---|
{{contact.first_name}} | The first name of the person visiting (if they previously filled out a form). |
{{location.name}} | The name of the Client's Business/Sub-Account. |
{{location.email}} | The support email of the Client's Business. Put this in the footer. |
{{location.full_address}} | The full physical address. Perfect for Contact pages. |
Drag the Custom JS/HTML Element onto your page, open the code editor, and paste the code.
Never update a footer year manually again.
<span id="year"></span>
<script>
document.getElementById("year").innerHTML = new Date().getFullYear();
</script>
Use on a Thank You page to send them back to the main site.
<script>
setTimeout(function() {
window.location.href = "https://yourclientwebsite.com";
}, 5000); // 5000 = 5 seconds
</script>
Using the GHL "Advanced Tab" to find a CSS ID is slow. Here is how professional WebDevs do it faster:
id="c-xxxxxxxx" tag on that highlighted line. Double click it and copy it.background: red;) live to see if it works without breaking your actual funnel.You have a 2-hour per day setup. This is amazing, but it means you must manage client expectations ruthlessly. Use current account documentation to verify feature availability, and protect your limited time with clear technical boundaries.
GoHighLevel accounts may expose Custom Objects for structured records beyond Contacts, such as a Vehicles object. Availability and builder support can vary by account, plan, permissions, and rollout, so verify the current account before promising an implementation.
Clients often say "Can you just quickly add this one thing?" when that "one thing" takes 3 hours. Since you only have 2 hours a day, use these professional scripts to protect your boundaries without sounding aggressive.
| The Client's Request | Your Professional Boundary Script |
|---|---|
| "Can you build out this massive 5-page funnel today?" | "I'd love to get this done for you! Just a heads-up, based on my part-time structure, this is a multi-day build. I will knock out the main Landing Page during my shift today, and tackle the Checkout/Thank You pages tomorrow. Sound good?" |
| "I want a completely custom coded animation that GHL doesn't have." | "That animation looks awesome! However, building that from scratch with custom JavaScript falls slightly outside the scope of our standard rapid-deployment builds. I can implement [Insert your CSS snippet animation] today, or we can look into hiring a dedicated JS developer for that specific feature." |
| "Can you keep making revisions to the header? I'm just not feeling it yet." (Endless Revisions) | "I want to make sure this looks perfect for you. Since I have limited hours dedicated to your account today, let's gather all your final header feedback into one bulleted list. I'll execute all of those changes at once during my shift tomorrow so we can move forward efficiently." |
Want to look like a high-tier professional during your 2 hours? Always do these two things before handing over a link:
A beautiful funnel is useless if the leads go nowhere. This is the exact 4-step process to create a fully functioning CRM loop in GoHighLevel.
Before you build the funnel, you must build the Form that collects the data. You cannot capture a lead without a form.
Now that the lead filled out the form, they need a place to go so the client's sales team can track them.
This is where the magic happens. You need an automation to grab the form data and physically push the lead into the Pipeline you just made, while simultaneously emailing them.
Workflows are built in "Draft" mode by default. In the top right corner of the workflow builder, toggle it to Publish and hit Save.
To test: Go to your live funnel link, put your own name and email in the form, and hit submit. Then, go check the "Opportunities" tab to see if your card appeared in the "New Lead" column, and check your inbox to see if the automated email fired.
Funnels in GHL are different from standard Websites. Funnels are designed to push a user through a linear sequence (Step 1 -> Step 2 -> Step 3) with no distraction menus. Here is how you build one.
A standard lead-gen funnel requires at least 2 steps. Click + Add New Step inside your new funnel.
Preview Generation...
Your funnel will not be live to the public until it is attached to a real web domain.
Once your funnel is live, you don't need external tracking tools. GHL tracks it all natively.