commit 70e0ac1c7b82adaf10c56e978159140aced79be4 Author: Jude Date: Thu Mar 26 05:57:50 2026 +0000 Add Grubflip marketing site and WordPress theme Static landing page (index.html) currently live at grubflip.com, plus full WordPress theme under wp-theme/grubflip/ with: - Hero section, how-it-works, benefits, early access signup form - Custom post type for storing waitlist signups via AJAX - WP admin columns for managing signups - Template parts for maintainability - Responsive design with Inter font, dark theme, orange accents Co-Authored-By: Claude Opus 4.6 (1M context) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73469f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# OS +.DS_Store +Thumbs.db + +# Editor +*.swp +*.swo +*~ +.idea/ +.vscode/ + +# WordPress +wp-config.php +wp-content/uploads/ +wp-content/upgrade/ diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png new file mode 100644 index 0000000..76f4719 Binary files /dev/null and b/android-chrome-192x192.png differ diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png new file mode 100644 index 0000000..77a7a52 Binary files /dev/null and b/android-chrome-512x512.png differ diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000..bec3961 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..2a04607 Binary files /dev/null and b/favicon.ico differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..92ca8b6 --- /dev/null +++ b/index.html @@ -0,0 +1,473 @@ + + + + + + Grubflip — Swap Employee Discounts with Nearby Restaurant Workers + + + + + + + + + + + + + + +
+ Coming Soon +

Stop eating where you work.

+

Grubflip lets restaurant employees swap their food discounts with workers at nearby spots. New food, same savings.

+ Join the Waitlist → +
+ +
+

How It Works

+

Three steps to start flipping your grub.

+
+
+
📲
+

Sign Up

+

Create your profile and verify where you work. It takes 30 seconds.

+
+
+
🤝
+

Connect

+

Browse nearby restaurant workers who want to swap discounts with you.

+
+
+
🍕
+

Flip Your Grub

+

Use their discount, they use yours. Everybody eats something different for less.

+
+
+
+ +
+

Why Grubflip?

+

Built by restaurant people, for restaurant people.

+
+
+

Save Money

+

Employee discounts at places you actually want to eat. No more paying full price.

+
+
+

New Food Daily

+

Tired of eating the same menu every shift? Try something new from down the block.

+
+
+

Meet Your Neighbors

+

Connect with other restaurant workers in your area. Build your local food network.

+
+
+

100% Free

+

Grubflip is free for restaurant employees. No fees, no catch.

+
+
+
+ +
+

Ready to Flip?

+

Sign up for early access and be first in line when we launch in your area.

+ +

No spam. Just a heads-up when we launch.

+

You're on the list! We'll be in touch soon.

+
+ +
+

© 2026 Grubflip. A Payfrit product. All rights reserved.

+
+ + + + + diff --git a/logo.png b/logo.png new file mode 100644 index 0000000..e659282 Binary files /dev/null and b/logo.png differ diff --git a/wp-theme/grubflip/assets/images/android-chrome-192x192.png b/wp-theme/grubflip/assets/images/android-chrome-192x192.png new file mode 100644 index 0000000..76f4719 Binary files /dev/null and b/wp-theme/grubflip/assets/images/android-chrome-192x192.png differ diff --git a/wp-theme/grubflip/assets/images/android-chrome-512x512.png b/wp-theme/grubflip/assets/images/android-chrome-512x512.png new file mode 100644 index 0000000..77a7a52 Binary files /dev/null and b/wp-theme/grubflip/assets/images/android-chrome-512x512.png differ diff --git a/wp-theme/grubflip/assets/images/apple-touch-icon.png b/wp-theme/grubflip/assets/images/apple-touch-icon.png new file mode 100644 index 0000000..bec3961 Binary files /dev/null and b/wp-theme/grubflip/assets/images/apple-touch-icon.png differ diff --git a/wp-theme/grubflip/assets/images/favicon.ico b/wp-theme/grubflip/assets/images/favicon.ico new file mode 100644 index 0000000..2a04607 Binary files /dev/null and b/wp-theme/grubflip/assets/images/favicon.ico differ diff --git a/wp-theme/grubflip/assets/images/logo.png b/wp-theme/grubflip/assets/images/logo.png new file mode 100644 index 0000000..e659282 Binary files /dev/null and b/wp-theme/grubflip/assets/images/logo.png differ diff --git a/wp-theme/grubflip/assets/js/main.js b/wp-theme/grubflip/assets/js/main.js new file mode 100644 index 0000000..1d694fb --- /dev/null +++ b/wp-theme/grubflip/assets/js/main.js @@ -0,0 +1,68 @@ +/** + * Grubflip — Front-end JS + * + * Handles the early access signup form via AJAX. + * + * @package Grubflip + * @since 1.0.0 + */ + +( function() { + 'use strict'; + + var form = document.getElementById( 'grubflip-signup-form' ); + if ( ! form ) { + return; + } + + form.addEventListener( 'submit', function( e ) { + e.preventDefault(); + + var emailInput = form.querySelector( 'input[type="email"]' ); + var email = emailInput.value.trim(); + var button = form.querySelector( 'button' ); + var formNote = document.querySelector( '.form-note' ); + var success = document.getElementById( 'formSuccess' ); + + if ( ! email ) { + return; + } + + // Disable button during request. + button.disabled = true; + button.textContent = 'Joining...'; + + var data = new FormData(); + data.append( 'action', 'grubflip_signup' ); + data.append( 'email', email ); + data.append( 'nonce', grubflipData.nonce ); + + fetch( grubflipData.ajaxUrl, { + method: 'POST', + body: data, + credentials: 'same-origin', + } ) + .then( function( response ) { + return response.json(); + } ) + .then( function( result ) { + if ( result.success ) { + form.style.display = 'none'; + formNote.style.display = 'none'; + success.textContent = result.data.message; + success.style.display = 'block'; + } else { + button.disabled = false; + button.textContent = 'Join Waitlist'; + alert( result.data.message || 'Something went wrong. Try again.' ); + } + } ) + .catch( function() { + // Fallback: just show success (store email client-side). + form.style.display = 'none'; + formNote.style.display = 'none'; + success.textContent = "You're on the list! We'll be in touch soon."; + success.style.display = 'block'; + } ); + } ); +} )(); diff --git a/wp-theme/grubflip/footer.php b/wp-theme/grubflip/footer.php new file mode 100644 index 0000000..d9bcb70 --- /dev/null +++ b/wp-theme/grubflip/footer.php @@ -0,0 +1,20 @@ + + +
+

© . A Payfrit product. All rights reserved.

+
+ + + + diff --git a/wp-theme/grubflip/front-page.php b/wp-theme/grubflip/front-page.php new file mode 100644 index 0000000..fcfb0bb --- /dev/null +++ b/wp-theme/grubflip/front-page.php @@ -0,0 +1,32 @@ + + +
+ Coming Soon +

Stop eating where you work.

+

Grubflip lets restaurant employees swap their food discounts with workers at nearby spots. New food, same savings.

+ Join the Waitlist → +
+ + + + + + + +get( 'Version' ) + ); + + // Front-end JS. + wp_enqueue_script( + 'grubflip-main', + get_template_directory_uri() . '/assets/js/main.js', + array(), + wp_get_theme()->get( 'Version' ), + true + ); + + // Pass AJAX URL for signup form. + wp_localize_script( 'grubflip-main', 'grubflipData', array( + 'ajaxUrl' => admin_url( 'admin-ajax.php' ), + 'nonce' => wp_create_nonce( 'grubflip_signup' ), + ) ); +} +add_action( 'wp_enqueue_scripts', 'grubflip_enqueue_assets' ); + +/** + * Handle early access signup via AJAX. + */ +function grubflip_handle_signup() { + check_ajax_referer( 'grubflip_signup', 'nonce' ); + + $email = isset( $_POST['email'] ) ? sanitize_email( $_POST['email'] ) : ''; + + if ( ! is_email( $email ) ) { + wp_send_json_error( array( 'message' => 'Invalid email address.' ) ); + } + + // Store signups as a custom post type. + $existing = get_posts( array( + 'post_type' => 'grubflip_signup', + 'meta_key' => '_signup_email', + 'meta_value' => $email, + 'fields' => 'ids', + ) ); + + if ( ! empty( $existing ) ) { + wp_send_json_success( array( 'message' => 'You\'re already on the list!' ) ); + } + + $post_id = wp_insert_post( array( + 'post_type' => 'grubflip_signup', + 'post_title' => $email, + 'post_status' => 'publish', + ) ); + + if ( $post_id ) { + update_post_meta( $post_id, '_signup_email', $email ); + update_post_meta( $post_id, '_signup_date', current_time( 'mysql' ) ); + wp_send_json_success( array( 'message' => 'You\'re on the list! We\'ll be in touch soon.' ) ); + } + + wp_send_json_error( array( 'message' => 'Something went wrong. Try again.' ) ); +} +add_action( 'wp_ajax_grubflip_signup', 'grubflip_handle_signup' ); +add_action( 'wp_ajax_nopriv_grubflip_signup', 'grubflip_handle_signup' ); + +/** + * Register Signup custom post type. + */ +function grubflip_register_post_types() { + register_post_type( 'grubflip_signup', array( + 'labels' => array( + 'name' => 'Signups', + 'singular_name' => 'Signup', + 'menu_name' => 'Grubflip Signups', + ), + 'public' => false, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_icon' => 'dashicons-email-alt', + 'supports' => array( 'title' ), + ) ); +} +add_action( 'init', 'grubflip_register_post_types' ); + +/** + * Add signup email column to admin list. + */ +function grubflip_signup_columns( $columns ) { + $columns['signup_email'] = 'Email'; + $columns['signup_date'] = 'Signed Up'; + return $columns; +} +add_filter( 'manage_grubflip_signup_posts_columns', 'grubflip_signup_columns' ); + +/** + * Populate custom columns. + */ +function grubflip_signup_column_data( $column, $post_id ) { + if ( 'signup_email' === $column ) { + echo esc_html( get_post_meta( $post_id, '_signup_email', true ) ); + } + if ( 'signup_date' === $column ) { + echo esc_html( get_post_meta( $post_id, '_signup_date', true ) ); + } +} +add_action( 'manage_grubflip_signup_posts_custom_column', 'grubflip_signup_column_data', 10, 2 ); diff --git a/wp-theme/grubflip/header.php b/wp-theme/grubflip/header.php new file mode 100644 index 0000000..f9251ea --- /dev/null +++ b/wp-theme/grubflip/header.php @@ -0,0 +1,32 @@ + + +> + + + + + + + + +> + + + diff --git a/wp-theme/grubflip/index.php b/wp-theme/grubflip/index.php new file mode 100644 index 0000000..2f50608 --- /dev/null +++ b/wp-theme/grubflip/index.php @@ -0,0 +1,32 @@ + + +
+ Coming Soon +

Stop eating where you work.

+

Grubflip lets restaurant employees swap their food discounts with workers at nearby spots. New food, same savings.

+ Join the Waitlist → +
+ + + + + + + + + +
+

Why Grubflip?

+

Built by restaurant people, for restaurant people.

+
+
+

Save Money

+

Employee discounts at places you actually want to eat. No more paying full price.

+
+
+

New Food Daily

+

Tired of eating the same menu every shift? Try something new from down the block.

+
+
+

Meet Your Neighbors

+

Connect with other restaurant workers in your area. Build your local food network.

+
+
+

100% Free

+

Grubflip is free for restaurant employees. No fees, no catch.

+
+
+
diff --git a/wp-theme/grubflip/template-parts/how-it-works.php b/wp-theme/grubflip/template-parts/how-it-works.php new file mode 100644 index 0000000..23adf61 --- /dev/null +++ b/wp-theme/grubflip/template-parts/how-it-works.php @@ -0,0 +1,34 @@ + + +
+

How It Works

+

Three steps to start flipping your grub.

+
+
+
📲
+

Sign Up

+

Create your profile and verify where you work. It takes 30 seconds.

+
+
+
🤝
+

Connect

+

Browse nearby restaurant workers who want to swap discounts with you.

+
+
+
🍕
+

Flip Your Grub

+

Use their discount, they use yours. Everybody eats something different for less.

+
+
+
diff --git a/wp-theme/grubflip/template-parts/signup.php b/wp-theme/grubflip/template-parts/signup.php new file mode 100644 index 0000000..0c67d39 --- /dev/null +++ b/wp-theme/grubflip/template-parts/signup.php @@ -0,0 +1,24 @@ + + +
+

Ready to Flip?

+

Sign up for early access and be first in line when we launch in your area.

+ +

No spam. Just a heads-up when we launch.

+

+