diff --git a/admin/app/admin/affiliates.rb b/admin/app/admin/affiliates.rb index 59bf36114..8bfc083bb 100644 --- a/admin/app/admin/affiliates.rb +++ b/admin/app/admin/affiliates.rb @@ -15,9 +15,11 @@ ActiveAdmin.register JamRuby::AffiliatePartner, :as => 'Affiliates' do #filter :partner_user filter :partner_name filter :id + filter :current_quarter_in_cents + filter :cumulative_earnings_in_cents filter :jamtracks_sold filter :subscriptions_count - filter :current_quarter_in_cents + filter :referral_user_count scope("Sorted By Current Quarter", default: true) { |scope| scope.where('partner_user_id IS NOT NULL').order('current_quarter_in_cents desc') } scope("Sorted By Jamtracks Sold", default: false) { |scope| scope.where('partner_user_id IS NOT NULL').order('jamtracks_sold desc') } diff --git a/jam-ui/cicd/generate.js b/jam-ui/cicd/generate.js index a8d21eef3..de14dffb0 100644 --- a/jam-ui/cicd/generate.js +++ b/jam-ui/cicd/generate.js @@ -10,6 +10,49 @@ const ArtistTemplatePageModule = require("./build/components/jamtracks/JKJamTrac var csvFilePath = `jamtracks-for-env/jam_tracks_for_jam_ui.${process.env.USER}.csv` var artistCsvFilePath = `jamtracks-for-env/jam_tracks_for_jam_ui_artists.${process.env.USER}.csv` +var sitemapPath = path.join(__dirname, ".", "build", "sitemap.xml"); +const clear_sitemap = () => { + fs.writeFileSync(sitemapPath, ""); + + // Add the root element + fs.writeFileSync(sitemapPath, `\n`, { flag: 'a' }); + + // Add the root url + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}\n`, { flag: 'a' }); + + // Add standard URLs specific to this site, such as: + // All prefix with /public + + + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/\n`, { flag: 'a' }); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/privacy\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/help\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/knowledge-base\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/help-desk\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/forum\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/unsubscribe\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/downloads\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/public/downloads-legacy\n`, { flag: 'a' } ); + + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/auth/login\n`, { flag: 'a' }); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/auth/register\n`, { flag: 'a' } ); + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/auth/forget-password\n`, { flag: 'a' } ); + + // Add the closing root element +} + +const add_song_to_sitemap = (artistSlug, songSlug) => { + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/backing-tracks/${artistSlug}/${songSlug}\n`, { flag: 'a' }); +} + +const add_artist_to_sitemap = (artistSlug) => { + fs.writeFileSync(sitemapPath, `${process.env.REACT_APP_BASE_URL}/backing-tracks/${artistSlug}\n`, { flag: 'a' }); +} + +const close_sitemap = () => { + fs.writeFileSync(sitemapPath, "", { flag: 'a' } ); +} + /** * Loads a CSV file into an array of objects. * @param {string} csvPath - The path to the CSV file. @@ -59,6 +102,8 @@ const init = () => { process.env.PUBLIC_URL = process.env.REACT_APP_BASE_URL; } + clear_sitemap(); + //const __dirname = path.resolve(path.dirname('')); @@ -94,6 +139,8 @@ const generateSongPages = async (render) => { const fullPath = process.env.REACT_APP_BASE_URL + location; const logoPath = process.env.REACT_APP_BASE_URL + "/favicon.svg"; + add_song_to_sitemap(original_artist_slug, name_slug); + console.log(`Generating ${artist} - ${song}`); const html = render @@ -209,6 +256,7 @@ const generateArtistPages = async (render) => { const fullPath = process.env.REACT_APP_BASE_URL + location; const logoPath = process.env.REACT_APP_BASE_URL + "/favicon.svg"; + add_artist_to_sitemap(original_artist_slug); console.log(`Generating ${artist}`); const songs = matchingSongs.map((song) => { @@ -272,6 +320,8 @@ const generateArtistPages = async (render) => { console.log(`Generated: ${outputFilePath}`); } + close_sitemap(); + console.log("All pages generated!"); }); }; diff --git a/jam-ui/cicd/webpack.config.js b/jam-ui/cicd/webpack.config.js index e7225f117..09d741a9d 100644 --- a/jam-ui/cicd/webpack.config.js +++ b/jam-ui/cicd/webpack.config.js @@ -4,7 +4,7 @@ const Dotenv = require("dotenv-webpack"); const environment = process.env.ENVIRONMENT || 'development'; const node_env = process.env.NODE_ENV || 'development'; - +const debug = node_env == 'development'; module.exports = { entry: "./client-hydrate.js", output: { @@ -42,7 +42,7 @@ module.exports = { react: path.resolve('./node_modules/react'), } }, - devtool: 'eval-source-map', + devtool: debug ? 'eval-source-map' : 'source-map', mode: node_env, plugins: [ new Dotenv({ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 1.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 1.webp new file mode 100644 index 000000000..526f13a81 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 1.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 2.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 2.webp new file mode 100644 index 000000000..7e4e68ba3 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 2.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 3.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 3.webp new file mode 100644 index 000000000..4836923f9 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 3.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 4.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 4.webp new file mode 100644 index 000000000..d07e1653b Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 4.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 5.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 5.webp new file mode 100644 index 000000000..d49a40ed4 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 5.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 6.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 6.webp new file mode 100644 index 000000000..2bc7c3406 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 6.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 7.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 7.webp new file mode 100644 index 000000000..9c8e3cc96 Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 7.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 8.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 8.webp new file mode 100644 index 000000000..0c30052cb Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 8.webp differ diff --git a/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 9.webp b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 9.webp new file mode 100644 index 000000000..5af0ca4fb Binary files /dev/null and b/jam-ui/public/img/landing/jamtracks/Top 10 Image - Number 9.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 1.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 1.webp new file mode 100644 index 000000000..526f13a81 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 1.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 2.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 2.webp new file mode 100644 index 000000000..7e4e68ba3 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 2.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 3.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 3.webp new file mode 100644 index 000000000..4836923f9 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 3.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 4.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 4.webp new file mode 100644 index 000000000..d07e1653b Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 4.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 5.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 5.webp new file mode 100644 index 000000000..d49a40ed4 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 5.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 6.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 6.webp new file mode 100644 index 000000000..2bc7c3406 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 6.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 7.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 7.webp new file mode 100644 index 000000000..9c8e3cc96 Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 7.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 8.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 8.webp new file mode 100644 index 000000000..0c30052cb Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 8.webp differ diff --git a/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 9.webp b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 9.webp new file mode 100644 index 000000000..5af0ca4fb Binary files /dev/null and b/jam-ui/src/assets/img/landing/jamtracks/Top 10 Image - Number 9.webp differ diff --git a/jam-ui/src/components/jamtracks/JKJamTracksArtistLandingBody.js b/jam-ui/src/components/jamtracks/JKJamTracksArtistLandingBody.js index 214eaa51e..a4379a21f 100644 --- a/jam-ui/src/components/jamtracks/JKJamTracksArtistLandingBody.js +++ b/jam-ui/src/components/jamtracks/JKJamTracksArtistLandingBody.js @@ -7,15 +7,15 @@ import {JamTrackPreviewProvider} from '../../context/JamTrackPreviewContext' import {useHistory} from "react-router-dom"; import useJamTrackShopping from "../../hooks/useJamTrackShopping"; import UserAuth, {useAuth} from '../../context/UserAuth'; -const awesome1 = '/img/landing/jamtracks/Top 10 Image - Number 1.png'; -const awesome2 = '/img/landing/jamtracks/Top 10 Image - Number 2.png'; -const awesome3 = '/img/landing/jamtracks/Top 10 Image - Number 3.png'; -const awesome4 = '/img/landing/jamtracks/Top 10 Image - Number 4.png'; -const awesome5 = '/img/landing/jamtracks/Top 10 Image - Number 5.png'; -const awesome6 = '/img/landing/jamtracks/Top 10 Image - Number 6.png'; -const awesome7 = '/img/landing/jamtracks/Top 10 Image - Number 7.png'; -const awesome8 = '/img/landing/jamtracks/Top 10 Image - Number 8.png'; -const awesome9 = '/img/landing/jamtracks/Top 10 Image - Number 9.png'; +const awesome1 = '/img/landing/jamtracks/Top 10 Image - Number 1.webp'; +const awesome2 = '/img/landing/jamtracks/Top 10 Image - Number 2.webp'; +const awesome3 = '/img/landing/jamtracks/Top 10 Image - Number 3.webp'; +const awesome4 = '/img/landing/jamtracks/Top 10 Image - Number 4.webp'; +const awesome5 = '/img/landing/jamtracks/Top 10 Image - Number 5.webp'; +const awesome6 = '/img/landing/jamtracks/Top 10 Image - Number 6.webp'; +const awesome7 = '/img/landing/jamtracks/Top 10 Image - Number 7.webp'; +const awesome8 = '/img/landing/jamtracks/Top 10 Image - Number 8.webp'; +const awesome9 = '/img/landing/jamtracks/Top 10 Image - Number 9.webp'; // To test this component in isolation, go to: // http://beta.jamkazam.local:4000/public/backing-tracks/artist/song // But this is only for development diff --git a/jam-ui/src/components/jamtracks/JKJamTracksLandingBody.js b/jam-ui/src/components/jamtracks/JKJamTracksLandingBody.js index dbf55ca86..b4626536e 100644 --- a/jam-ui/src/components/jamtracks/JKJamTracksLandingBody.js +++ b/jam-ui/src/components/jamtracks/JKJamTracksLandingBody.js @@ -7,15 +7,15 @@ import {JamTrackPreviewProvider} from '../../context/JamTrackPreviewContext' import {useHistory} from "react-router-dom"; import useJamTrackShopping from "../../hooks/useJamTrackShopping"; import UserAuth, {useAuth} from '../../context/UserAuth'; -const awesome1 = '/img/landing/jamtracks/Top 10 Image - Number 1.png'; -const awesome2 = '/img/landing/jamtracks/Top 10 Image - Number 2.png'; -const awesome3 = '/img/landing/jamtracks/Top 10 Image - Number 3.png'; -const awesome4 = '/img/landing/jamtracks/Top 10 Image - Number 4.png'; -const awesome5 = '/img/landing/jamtracks/Top 10 Image - Number 5.png'; -const awesome6 = '/img/landing/jamtracks/Top 10 Image - Number 6.png'; -const awesome7 = '/img/landing/jamtracks/Top 10 Image - Number 7.png'; -const awesome8 = '/img/landing/jamtracks/Top 10 Image - Number 8.png'; -const awesome9 = '/img/landing/jamtracks/Top 10 Image - Number 9.png'; +const awesome1 = '/img/landing/jamtracks/Top 10 Image - Number 1.webp'; +const awesome2 = '/img/landing/jamtracks/Top 10 Image - Number 2.webp'; +const awesome3 = '/img/landing/jamtracks/Top 10 Image - Number 3.webp'; +const awesome4 = '/img/landing/jamtracks/Top 10 Image - Number 4.webp'; +const awesome5 = '/img/landing/jamtracks/Top 10 Image - Number 5.webp'; +const awesome6 = '/img/landing/jamtracks/Top 10 Image - Number 6.webp'; +const awesome7 = '/img/landing/jamtracks/Top 10 Image - Number 7.webp'; +const awesome8 = '/img/landing/jamtracks/Top 10 Image - Number 8.webp'; +const awesome9 = '/img/landing/jamtracks/Top 10 Image - Number 9.webp'; // To test this component in isolation, go to: // http://beta.jamkazam.local:4000/public/backing-tracks/artist/song // But this is only for development diff --git a/web/app/assets/javascripts/react-components/landing/JamTrackLandingBottomPage.js.jsx.coffee b/web/app/assets/javascripts/react-components/landing/JamTrackLandingBottomPage.js.jsx.coffee index 4510b3061..c58074524 100644 --- a/web/app/assets/javascripts/react-components/landing/JamTrackLandingBottomPage.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/landing/JamTrackLandingBottomPage.js.jsx.coffee @@ -16,7 +16,7 @@ context = window

1
Huge, High Quality Multi-Track Catalog

-

+

JamKazam offers a catalog of 3,700+ songs. Each song is reviewed for quality, and every recording is a complete multi-track, with fully isolated tracks for each part of the music - e.g. lead vocal, backing vocals, lead guitar, rhythm guitar, keys, bass, drums, etc. This gives you complete creative control @@ -28,7 +28,7 @@ context = window

2
Solo, Mute, Pan or Set Level on Any Part

-

+

When learning to play a part, it's incredibly valuable to be able to hear just one part in isolation. Once you've learned your part, you can turn around and mute just that one part, and then play along with the rest of the band. Or if you prefer, you can turn that part down low but keep it around as a subtle hint. Or pan the recorded track into @@ -40,7 +40,7 @@ context = window

3
Make Custom Mixes

-

+

When you've customized the JamTrack mix, you can easily save your custom mixes to use them again later without having to recreate them. Your custom mixes are saved to the JamKazam cloud, so you can access them from almost any Internet-connected device. If you want to use your mixes outside the JamKazam app, you can also export custom mixes @@ -52,7 +52,7 @@ context = window

4
Slow Down For Practice

-

+

You can easily slow down playback of your JamTrack by a specific % without changing pitch, so that the song still sounds "right", just slower. This is great for building your technique on tougher sections while gradually increasing tempo. You can also make JamTracks play faster if you want to hit the jets. @@ -63,7 +63,7 @@ context = window

5
Change Pitch/Key

-

+

If you're a singer and you need to bring the song down into your vocal range, or if you're an instrumentalist and want to change the piece to a different key, the JamKazam app lets you change the pitch of any JamTrack up or down by a specified number of semitones (half steps). @@ -74,7 +74,7 @@ context = window

6
Apply VST & AU Audio Plug-In Effects

-

+

The free JamKazam app lets you easily apply VST & AU plugin effects to your live performance, mixed together seamlessly with JamTrack playback. For example, guitarists can apply popular amp sims like AmpliTube to get just the right guitar tone to match the song, and vocalists can apply effects like reverb, pitch correction, etc. @@ -85,7 +85,7 @@ context = window

7
Use MIDI Instruments

-

+

The free JamKazam app also lets you use MIDI instruments, and mix and record this instrumental audio with JamTracks. For example, keys players can use MIDI keyboard controllers with VST & AU plugins to generate traditional piano sounds, Rhodes electric piano, Hammond organ, and other classic keys tones. And drummers who use electronic kits can use their favorite @@ -135,7 +135,7 @@ context = window

10
JamTracks Work With All Your Stuff

-

+

You can use your JamTracks with any device that can run a standard web browser for playback of the JamTracks. If you want to mix your live performance with the JamTrack for recordings, and to access other advanced features, you'll need to use a JamKazam app. Our app is currently available for Mac and Windows computers,