diff --git a/.env.example b/.env.example index acc2a9084..7b0959aad 100644 --- a/.env.example +++ b/.env.example @@ -4,4 +4,5 @@ GATSBY_BREATHECODE_HOST=https://breathecode-test.herokuapp.com/v1 GATSBY_BLOG_ACADEMY_TOKEN=asdasdasdasgttgetrgergteg GATSBY_BLOG_ACADEMY_ID=7 GATSBY_CAPTCHA_KEY=dfsdfsfsdsfgdfgt4353456345 -GATSBY_BREATHECODE_TEST=https://breathecode-test.herokuapp.com/v1 \ No newline at end of file +GATSBY_BREATHECODE_TEST=https://breathecode-test.herokuapp.com/v1 +GATSBY_OPENAI_KEY=dfsdfsfsdsfgdfgt4353456345 \ No newline at end of file diff --git a/package.json b/package.json index a6321fd88..3c7ad4e4b 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "scripts": { "start": "gatsby develop -H 0.0.0.0 -o", "test": "sh ./src/test/test.sh", + "prompts": "sh ./src/prompt/prompt.sh", "start:storybook": "start-storybook -p 9000 -c .storybook", "build": "npm run test && node ./src/utils/makePagesDictionary.js && node ./src/test/test.redirect.js && node ./src/utils/makePostsDictionary.js && node ./src/utils/makeRedirectsDictionary.js && gatsby build", "build:gatsby": "gatsby build", diff --git a/prompts/awards.prompt b/prompts/awards.prompt new file mode 100644 index 000000000..5473cbb88 --- /dev/null +++ b/prompts/awards.prompt @@ -0,0 +1,51 @@ +The following are awards and recognitions 4Geeks Academy has received thru the years: + +Award title: Florida Department of Education +Description of the award: as The United States of America ensures education quality thru federal deparments of education, being certified means we have to anually commit and comply with federal and national regulations to ensure academy success and renewed license. + +--- + +Award title: Best Bootcamp for Course Report 2023 +Description of the award: as We have been selected as one of the Top Coding Bootcamps globally for 3 years in a row + +--- + +Award title: Best Bootcamp according to Switchup 2023 +Description of the award: as Not only in Florida, but over each of our campus 4Geeks is constantly keeping a ~5 start rating that makes us one of the top bootcamp in the world + +--- + +Award title: Winners of the Premios Tecnologia Siglo XXI mention 'Formación' +Description of the award: as Our campus in Spain was awarded with the Premio Tecnología Siglo XXI on the 'Formation' category in 2023 + +--- + +Award title: Top Coding School according to Newsweek +Description of the award: as 4Geeks Academy has been recognized as one of the top 10 coding bootcamps in the United States according to Newsweek. + +--- + +Award title: Best Career Oriented Educational Program +Description of the award: as Educational Excelence Awards 2021 to the Best Career Oriented Educational Program specialized in Coding Bootcamps, more information found on the palmares for the 2021 awards + +--- + +Award title: Most Innovative Program +Description of the award: as Educational Excelence Awards 2021 to the most innovative coding bootcamp school, more information found on the palmares for the 2021 awards + +--- + +Award title: Best International Trajectory +Description of the award: as Educational Excelence Awards 2021 to the best international trajectory school, more information found on the palmares for the 2021 awards + +--- + +Award title: 4.9 on all reviews +Description of the award: as 4.9 in all Course Report, Switchup and Google reviews. + +--- + +Award title: Award Winning Syllabus +Description of the award: as Award winning syllabus. + +You can learn more about the awards here: https://4geeksacademy.com/us/awards \ No newline at end of file diff --git a/prompts/datascience-ml.prompt b/prompts/datascience-ml.prompt new file mode 100644 index 000000000..a7f5ae9ed --- /dev/null +++ b/prompts/datascience-ml.prompt @@ -0,0 +1 @@ +4Geeks Academy offers a course titled "Become a AI Machine Learning Engineer" which is designed for individuals with no previous knowledge in the field. The course duration is 16 weeks, with 3 classes held weekly and a maximum class size of 12 people. Students will learn Python, SQL, Looker (Google Data Studio), Streamlit, and Statistics, and become professional Data Analysts capable of contributing to data-driven teams. The course covers topics such as predictive modeling, supervised and unsupervised learning models, and the complete lifecycle of developing and deploying AI projects. The instructors are experienced professionals in the field, and the course does not have any prerequisites. The certificates offered by 4Geeks Academy are recognized by multiple organizations. The course is available in English and Spanish. For more information, visit their website at https://4geeksacademy.com/us/coding-bootcamps/datascience-machine-learning. stop \ No newline at end of file diff --git a/prompts/full-stack.prompt b/prompts/full-stack.prompt new file mode 100644 index 000000000..dedaf006d --- /dev/null +++ b/prompts/full-stack.prompt @@ -0,0 +1,5 @@ +4Geeks Academy offers a Full Stack Developer Course where you can master web development skills and technologies. The course duration is 16+2 weeks with 3 classes weekly. No previous coding skills are required, and you can choose between English and Spanish for the syllabus and content. The program covers sought-after technologies like Python and JavaScript, and you'll learn algorithm scripting, front-end libraries, and API utilization. Upon completion, you'll earn a Full-Stack Developer certificate. The course is designed to give you hands-on experience by developing and presenting your own project. Join 4Geeks Academy today to boost your career in tech. + +For more information, visit: [https://4geeksacademy.com/us/coding-bootcamps/part-time-full-stack-developer](https://4geeksacademy.com/us/coding-bootcamps/part-time-full-stack-developer) + +Stop \ No newline at end of file diff --git a/prompts/locations.prompt b/prompts/locations.prompt new file mode 100644 index 000000000..306810d63 --- /dev/null +++ b/prompts/locations.prompt @@ -0,0 +1,109 @@ +4Geeks Academy is available in the following locations: + +Next campus: +Location: Atlanta, USA +Available Modes: Online +Phone Number: (786) 416-6640 +Contact Email: n/a +Relevant Information: Atlanta is a thriving tech ecosystem with over 850 tech companies and 70,000+ tech workers. Coding bootcamps, like 4Geeks Academy, aim to bridge the skills gap and supply tech talent to meet the increasing demand for coding expertise from expanding tech companies in the city. +Address: Not specified in the YML +Website: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-atlanta +Social Media: +- Facebook: https://www.facebook.com/4geeksacademy +- Twitter: https://www.twitter.com/4geeksacademy +- Instagram: https://www.instagram.com/4geeksacademy +- Meetup: https://www.meetup.com/4geeks-academy +Total characters used: 373 + +Next campus: +Barcelona, Spain offers the 4Geeks Academy coding campus, available in Online, Hybrid, or In-person modes. Contact +34 910 86 69 83 or visit their website for more information. With a dynamic tech ecosystem, Barcelona is a leading hub for startups and increasing in demand for coding expertise. The bootcamp provides immersive and hands-on education, creating opportunities for individuals to make their mark in the city's tech landscape. Connect with 4Geeks Academy on social media through Facebook, Twitter, Instagram, and Meetup. Visit their website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-barcelona-spain. + +Next campus: +Berlin, Germany offers 4Geeks Academy, a cutting-edge coding bootcamp suitable for online, hybrid, or in-person learning modes. Their campus is located in the city, known for its thriving tech scene and growing demand for skilled developers. With a website showcasing available courses and social media platforms for networking, students can expect a diverse and nurturing learning environment. Contact them at +34 910 86 69 83 or visit their website for more information: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-berlin-germany. + +Next campus: +Bogotá, Colombia is a vibrant location for aspiring coders and entrepreneurs, with a growing tech scene and a high demand for coding skills. 4Geeks Academy offers multiple modes of learning: online, hybrid, or in-person. Contact us at (300) 728-2898 or through our website for more information. Follow us on social media to stay updated on our coding bootcamp in Bogotá: Facebook, Twitter, and Instagram. Our campus is located in a supportive tech community, making it the perfect environment to learn coding and make an impact in Colombia's tech landscape. Visit our website for details: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-colombia. + +Next campus: +Buenos Aires, Argentina offers Online, Hybrid, and In-person options for 4Geeks Academy. Contact them at +57 300 7282898 or visit their website for more information. The city is known for its innovation and entrepreneurship opportunities, with a supportive government and access to funding. The vibrant startup ecosystem has seen success in areas such as e-commerce, edtech, agritech, and mobility solutions. + +Next campus: +Caracas, Venezuela offers an Online mode for 4Geeks Academy, providing high speed internet and a first class office. With a focus on technological entrepreneurship, this campus is perfect for SMEs looking to grow quickly. Contact information includes a phone number and relevant email address. Social media platforms such as Facebook, Twitter, and Instagram can be used for further information. Located in a city with great opportunities, students will have the chance to thrive both in and out of the country. For more information, visit their website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-caracas. + +Next campus: +Chicago, USA offers the Online mode of study for coding enthusiasts through 4Geeks Academy. Their commitment to nurturing a diverse and skilled coding community is evident with a strong tech scene and flourishing startup ecosystem in the city. With a focus on software development and digital innovation, Chicago has become a magnet for tech enthusiasts. Contact (786)416-6640 or visit their website at 'https://4geeksacademy.com/us/coding-campus/coding-bootcamp-chicago' for more information. Connect with 4Geeks Academy Chicago on social media through their Facebook, Twitter, Instagram, and Meetup accounts. + +Next campus: +San Jose, Costa Rica is home to 4Geeks Academy, a top coding campus focused on providing coding skills and bridging the skills gap in the tech industry. With options for online, hybrid, or in-person learning, the campus is accessible to all. The campus is backed by a supportive startup environment, with various incubators, accelerators, and co-working spaces providing support and resources to entrepreneurs. The country also hosts events and networking opportunities for students to connect with investors and industry experts. With a focus on technology and a well-educated and skilled workforce, the country's universities and technical institutions offer programs in computer science and software engineering. To further nurture coding skills, Costa Rica offers coding bootcamps, workshops, and training programs. For more information, visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-costa-rica. Connect with 4Geeks Academy San Jose, Costa Rica on social media via Facebook, Twitter, and Instagram. + +Next campus: +Miami, USA offers Online, Hybrid, or In-person modes of learning at 4Geeks Academy. Contact them at (786) 416-6640 or through their social media accounts on Facebook, Twitter, Instagram, and Meetup. The campus is located in Brickell, 5 minutes away from the Metro Mover and has free parking. The office is accessible 24/7 during the week and hosts "Coding Weekends" on Saturdays. For more information and to become a part of the #1 part-time Coding Bootcamp in Miami, visit their website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-miami. + +Next campus: +Dublin, Ireland offers Online, Hybrid, and In-person coding bootcamp modes at 4Geeks Academy. One-on-One mentoring, live chat support for 12 hours daily, interactive exercises and videos, and real-time streaming classes are available in this campus. Graduates can also join the active social network for ongoing learning and support. Visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-dublin-ireland for more information. + +Next campus: +Hamburg, Germany offers a variety of modes of learning at 4Geeks Academy including online, hybrid, and in-person options. Students can access unlimited one-on-one mentoring, 12-hour chat support, interactive exercises and videos, and real-time streaming classes. The campus also has a social network connecting thousands of graduates from around the world. For more information visit the website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-hamburg-germany and follow them on social media: Facebook, Twitter, Instagram, and Meetup. + +Next campus: +Houston, USA is home to 4Geeks Academy, a leading coding bootcamp. The campus offers an online mode for accessibility. Interested individuals can contact the academy through their phone number, (786) 416-6640, or via email. With the city's growing demand for coding proficiency, 4Geeks Academy aims to contribute to this trend by providing comprehensive training programs. The campus is located in Houston, USA and their website, social media networks (Facebook, Twitter, Instagram, and Meetup) provide more information about their coding bootcamp. + +Next campus: +Location: La Paz, Bolivia +Available modes: Online, Hybrid or In-person. +Contact information: +57 300 7282898; [contact email not available] +Address: Campus location varies; always centrally located with easy access to public transportation. +Relevant information: 4Geeks Academy classes in Bolivia are currently only available online. In-person campuses are centrally located in popular areas of the city. +Website: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-bolivia +Social media: Facebook - https://www.facebook.com/4geeksacademy; Twitter - https://www.twitter.com/4geeksacademy; Instagram - https://www.instagram.com/4geeksacademy + +Next campus: +Lima, Peru offers 4Geeks Academy with various modes of learning including Online, Hybrid or In-person options. With a thriving startup ecosystem, the country is home to innovative companies focused on addressing local challenges. The campus can be contacted through their phone number or website, and can be found on social media through Facebook, Twitter, and Instagram. For more information, visit the website listed above. + +Next campus: +Lisbon, Portugal offers various modes of learning at 4Geeks Academy, includingOnline, Hybrid, and In-person options. You can contact them at +351 21 020 0785 or through their website for more information about their programs. Lisbon is a bustling startup hub with access to funding and support, making it an ideal location for tech enthusiasts. The city also has a diverse pool of talent from local universities and coding bootcamps. Check out their website for more details and follow them on social media platforms such as Facebook, Twitter, Instagram, and Meetup. https://4geeksacademy.com/us/coding-campus/coding-bootcamp-lisbon-portugal + +Next campus: +Los Angeles, USA offers an online mode for students to learn the necessary coding skills through 4Geeks Academy. Contact them through phone at (786) 416-6640. This campus provides a rich environment for tech development and entrepreneurship as well as a growing tech industry. Learn more about the Los Angeles campus at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-losangeles and stay connected through their social media platforms like Facebook, Twitter, Instagram, and Meetup. + +Next campus: +Madrid, Spain offers online, hybrid or in-person courses at 4Geeks Academy. Contact them at +34 910 86 69 83 or visit their website for more information. The campus is conveniently located near the subway and open to students 12 hours a day. Coding weekends on Saturdays include senior coaching, socializing, and pizza. Follow them on social media or attend Meetup events to stay connected. + +Next campus: Málaga, Spain offers a Coding Bootcamp with multiple modes of learning available - online, hybrid, or in-person. The campus is conveniently located just 2 minutes away from the subway in one of Málaga's most active areas. The campus is open to students 12 hours a day and also offers "Coding Weekends" on Saturdays for additional senior coaching, socializing, and pizza. Connect with the campus through social media or visit their website for more information. + +Next campus: +4Geeks Academy Mexico City, Mexico offers Online, Hybrid or In-person modes of learning. Contact them at +57 300 7282898 or visit their website for more information. The city has a growing tech sector in various industries and the government is working towards creating a supportive ecosystem for startups and entrepreneurs. The campus provides resources, workshops, and networking opportunities to connect entrepreneurs with investors and mentors. Connect with them on Facebook, Twitter, and Instagram. Visit their website to learn more about their coding bootcamp in Mexico: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-mexico + +Next campus: +Milan, Italy - Available modes: Online, Hybrid, or In-person. Contact information: +34 910 86 69 83, . Relevant information: Milan is a hub for creative and innovative startups, with successful companies in various sectors including fashion, food tech, and smart cities. The city has a diverse talent pool, with renowned universities and technical institutions offering programs in technology, engineering, and design. Milan also offers coding bootcamps, workshops, and training programs for coding skills. Visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-milano-italy for more information. Social media: Facebook, Twitter, Instagram, Meetup. + +Next campus: +Monte Video, Uruguay offers Online, Hybrid, and In-Person coding programs through 4Geeks Academy. For inquiries, call +57 300 7282898 or visit their website. The country's tech industry is thriving, with notable startups like PedidosYa and dLocal. Uruguay attracts local and international tech talent, with universities offering tech programs and funding initiatives, incubators, and networking events supporting startup growth. Coding bootcamps and programming workshops are available to nurture coding skills and meet the demand for tech talent. For more information, visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-uruguay. Follow 4Geeks Academy on Facebook, Twitter, and Instagram for updates and announcements. + +Next campus: +Munich, Germany is home to 4Geeks Academy's coding campus offering online, hybrid, and in-person coding courses. With a diverse and dynamic startup ecosystem, Munich is known for its focus on cutting-edge technologies and successful startups in areas such as mobility, fintech, and cybersecurity. The city boasts top talent from around the world and offers coding bootcamps, workshops, and training programs to nurture coding skills and support the development of tech talent. For more information, visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-munich-germany and check out the academy's social media pages on Facebook, Twitter, Instagram, and Meetup. + +Next campus: +NYC, USA offers a thriving tech community and a dynamic startup landscape. With a significant demand for coding proficiency, coding bootcamps have become prevalent in New York. +4Geeks Academy's NYC campus offers an Online mode of learning, along with a comprehensive coding education. Their website, https://4geeksacademy.com/us/coding-campus/coding-bootcamp-nyc, provides more information on their campus, located in New York City. The campus can be contacted via phone at (786) 416-6640, and their social media networks, including Facebook, Twitter, Instagram, and Meetup, further showcase their community-focused approach to learning. + +Next campus: +Orlando, USA offers an Online, Hybrid, and In-person mode of learning at 4Geeks Academy. Contact them at (786) 416-6640 or visit their website for more information. This vibrant city is home to big companies like EA Sport, Siemens, Boeing, and Disney, making it a hub for creativity and innovation. Join the thriving tech ecosystem, where ideas turn into cutting-edge solutions that revolutionize the world. Don't miss your chance to be a part of this amazing community, check out 4Geeks Academy Orlando's social media channels for more updates and events. Website: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-orlando. + +Next campus: +Panama City, Panama offers on campus, hybrid and online modes at 4Geeks Academy. Contact them at +57 300 728 2898 or via social media on Facebook, Twitter, and Instagram. Their campus is located in a growing tech scene with startups in fintech, e-commerce, healthtech, edtech, and logistics. Panama provides diverse talent and resources including funding initiatives, incubators, accelerators, and networking events. This campus offers coding bootcamps and training programs to develop programming skills and meet the demand for tech talent. For more information, visit their website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-panama. + +Next campus: +Quito, Ecuador. Available modes: Online, Hybrid or In-person. Phone: +57 300 7282898. Contact email: [undefined]. The country's technology scene is constantly evolving, with Quito and Guayaquil leading the way. Ecuador has seen advancements in ecommerce, fintech, healthtech, edtech, and agritech, with government support for the tech industry through initiatives promoting innovation and entrepreneurship. For more information, visit https://4geeksacademy.com/us/coding-campus/coding-bootcamp-ecuador. Social media: Facebook: https://www.facebook.com/4geeksacademy, Twitter: https://www.twitter.com/4geeksacademy, Instagram: https://www.instagram.com/4geeksacademy. + +Next campus: +Rome, Italy offers a variety of modes for learning at 4Geeks Academy including Online, Hybrid, and In-person options. With a talented workforce and government initiatives aimed at supporting entrepreneurship and innovation, the city is an attractive hub for startups and skilled professionals. The coding bootcamp located in Rome provides training programs and workshops to equip individuals with the necessary skills for the tech industry. For more information, visit the website at https://4geeksacademy.com/us/coding-campus/coding-bootcamp-rome-italy. Contact information can be found at +34 910 86 69 83, or on social media via Facebook, Twitter, Instagram, and Meetup under 4Geeks Academy. + +Next campus: +Santiago de Chile, Chile offers Online and Hybrid coding bootcamps through 4Geeks Academy. This modern and renovated campus, located in the eastern part of the city, is easily accessible by metro. With high-speed internet and unlimited access for students, it provides a great learning opportunity for Chileans and foreigners to become programmers. Contact them at +56 9 2006 5786 or visit their website for more information: https://4geeksacademy.com/us/coding-campus/coding-bootcamp-santiago. Connect with 4Geeks Academy Santiago de Chile on Facebook, Twitter, Instagram, and Meetup at their respective social media handles provided on their website. + +Next campus: +Toronto, Canada offers multiple modes for learning at 4Geeks Academy, including online, hybrid, and in-person options. With a strong focus on coding, this campus is part of a thriving tech community that draws talent and investment from around the world. As a result, there is high demand for coding expertise, making this city an ideal location for intensive coding bootcamps and schools like 4Geeks Academy. For more information and to connect with the community, visit the website and follow them on social media. + +Next campus: +Valencia, Spain offers Online, Hybrid, and In-person modes of learning at 4Geeks Academy. Contact +34 910 86 69 83 or visit the website for more information. The city houses prestigious universities and technical institutes for technology, engineering, and business programs, attracting a diverse talent pool. The tech sector in Valencia is fueled by startups such as TypingDNA, EclecticIQ, and Freshly Cosmetics, which focus on sustainable tech, smart cities, tourism, and food tech. Learn coding through bootcamps, workshops, and training programs in this flourishing city. diff --git a/prompts/plan-datascience-ml.prompt b/prompts/plan-datascience-ml.prompt new file mode 100644 index 000000000..6f16d36ef --- /dev/null +++ b/prompts/plan-datascience-ml.prompt @@ -0,0 +1,23 @@ +Spain: +- Scholarship available: Pay in installments, starting from €200 per month. Up to €2500 in scholarships available. +- Pay upfront: Get a discount, pay €4950. +- Income Share Agreement (ISA): Pay only when you earn more than €16000 per year. + +USA: +- Scholarship: Pay today or in 3 parts, price $6999. +- Financed: Pay in 3, 4 or 5 years, with multiple partners offering loans and payment plans. +- Full Payment: Pay today, price $9999. + +Chile: +- Pay upfront: Price 4.500.000 CLP (without discount applied). +- Financed: 18 months payment, starting from ~220.500 CLP. + +Europe: +- Scholarship available: Tailor-made financing plans, starting from €200 per month. Up to €2500 in scholarships available. +- Pay upfront: Get a discount, pay €5000. +- Income Share Agreement (ISA): Pay only when you earn more than €22000 per year. + +Latam: +- Only pay for the program: Pay monthly, starting from $120. +- Data Science Program Only: Pay upfront, $4000. +- Data Science program + Career Support: Pay $5000, get lifetime career support and access to the online community. \ No newline at end of file diff --git a/prompts/plan-full-stack.prompt b/prompts/plan-full-stack.prompt new file mode 100644 index 000000000..b1ba457da --- /dev/null +++ b/prompts/plan-full-stack.prompt @@ -0,0 +1,19 @@ +Spain: +- Scholarship available for full-time courses. Customized financing without interests. Pay €4,800 instead of €6,700. Scholarships subject to availability. From €160/mo. +- Pay upfront and get a discount. Pay €4,550 instead of €6,700. Discounts up to €2,150. +- Income Share Agreement (ISA). Pay only when you get a job. Pay a small portion of your salary. NO INTEREST! Price: €0* + +USA: +- Scholarship available for full-time courses. Pay today or in 3 parts. Price: $5999. You're saving $4000 USD. +- Full Payment option for full-time courses. Pay today. Price: $10999. You're saving $1000 USD. +- Income Share Agreement (ISA) for full-time courses. Pay only when you get a job. Price: $0. Get $400 p/week living stipends. +- Financed option available for full-time courses. 24 months payment. Price: ~$250 per month. Several partners offering loans and payment plans. + +Chile: +- Pay upfront and get a discount for full-time courses. Price: 3.800.000 CLP*. Pay with bank transfer, credit or debit card. +- Financed option available for full-time courses. 18 months payment. Price: ~184.000 CLP. Tailor-made financing from 6 to 18 months. +- Income Share Agreement (ISA) for full-time courses. Price: 0 CLP*. Pay 16% of your salary when you get a job until paid in full. Only if you get a job in tech. + +Europe: +- Pay upfront and get a discount for part-time courses. Price: €4600*. Pay with wire transfer, credit or debit card. +- Scholarship available for part-time courses. Tailor-made financing plans, with or without interest, from 4 to 30 installments. Price \ No newline at end of file diff --git a/prompts/projects.prompt b/prompts/projects.prompt new file mode 100644 index 000000000..cf69ccf92 --- /dev/null +++ b/prompts/projects.prompt @@ -0,0 +1,54 @@ +The following are capstone projects built by our students during our bootcamps: + +Project name: Raspberry Sky +Description: A platform capable of receiving information (wind, temperature, geolocation, etc) from rockets being launched to outer space. The platform also lets you make arrangements to send your own rocket, track it and receive messages from it. +Video demonstration: https://www.youtube.com/watch?v=OZfv9kYl0_o +Github URL: https://github.com/Luis846/SatelliteBetaSoftware +Live URL: https://sattelite-beta.vercel.app/ +Buit by: Luis Rivera and Naila Kaliyeva during the full-stack bootcamp + +--- + +Project name: IMS: Inventory Tracking +Description: IMS is a Pharmacy Inventory and logistics tracking system built using Python, Javascript, React, and integration with Barcode Readers, SMS, the Twillio API, and GPS Tracking Systems. IMS holds stock quantities of all products stored and sold by the Drug Store and then tracks the vehicles that deliver those sells. +Video demonstration: https://www.youtube.com/watch?v=TTjSZ2Lud2E +Github URL: https://github.com/sebastianpd1/IMS-FRONTEND +Live URL: https://ims-frontend.vercel.app/react-hello-webapp/private/dashboard +Buit by: Jonathan Perez and Sebastian Pinto and Paola Castro during the full-stack bootcamp + +--- + +Project name: The Hour +Description: Happy Hour! What are you doing today? The Hour is your perfect night sidekick, find happy hour information about bars, night clubs and what is happening in the city! This application stands out because of its UI/UX component, very easy to use, mobile first and build around React.js, Javascript and Headless Wordpress API for easy management. +Video demonstration: https://www.youtube.com/watch?v=KTeOIU3eVrc +Github URL: https://github.com/samirbenzada/Iwash +Live URL: +Buit by: Darius Bounds and Christian Valdes during the full-stack bootcamp + +--- + +Project name: WonderTracker +Description: A platform capable of keeping your travel information and documents saved in an absolute secure system. It also lets you track places where you have been, and gather information that you thought was important to save for as long as you want - all in just one place. +Video demonstration: +Github URL: https://github.com/gmihov001/Wandertracker_front-end +Live URL: https://wandertrackerfront-end.gmihov001.now.sh +Buit by: Fernando Funes and George Mihov during the full-stack bootcamp + +--- + +Project name: iWash +Description: iWash is an application integrating hardware and software towards building a platform capable of setting and launching Smart Laundry machines from your mobile device. You can pay the cost of the service as well as set time, speed, type of laundry process, and receive notifications about the status of your laundry. +Video demonstration: +Github URL: https://github.com/samirbenzada/Iwash +Live URL: https://iwash-react.herokuapp.com/ +Buit by: Samir Benzada and Victor Mori during the full-stack bootcamp + +--- + +Project name: reMindful +Description: Generating awareness about recycling and considering all the steps that need to be covered. They have created an application that integrates both software and hardware that allows to weigh the amount of plastic, glass or garbage there is within a container and how much it will affect both the recycling process as well as the environment. +Video demonstration: https://www.youtube.com/watch?v=cKcZD0_1IKk +Github URL: https://github.com/gabsssrod/ReduceReuseRecycle-frontEnd +Live URL: https://re-mindful.vercel.app/ +Buit by: Jordan Aguiriano and Gabriela Rodriguez during the full-stack bootcamp + diff --git a/prompts/students.prompt b/prompts/students.prompt new file mode 100644 index 000000000..742d7400d --- /dev/null +++ b/prompts/students.prompt @@ -0,0 +1,200 @@ +The following are 4Geeks Academy students: +Name: Peter Schwarck +Hired as Business Systems Analyst at eBay +LinkedIn profile URL: https://www.linkedin.com/in/peter-schwarck/ + +--- + +Name: Azam Abdul Malik +Hired as Lead Wireless Carrier Engineer at Facebook +LinkedIn profile URL: https://www.linkedin.com/in/azamjiva + +--- + +Name: Rebecca Willett +Hired as Software Engineer at HashiCorp +LinkedIn profile URL: https://www.linkedin.com/in/willettrebecca/ + +--- + +Name: Hernán García +Hired as Software Developer at Celerity +LinkedIn profile URL: https://www.linkedin.com/in/hernan-garcia/ + +--- + +Name: João Henrique Xavier +Hired as Software Engineer at NCCI +LinkedIn profile URL: https://www.linkedin.com/in/joao-henrique-xavier/ + +--- + +Name: Florencia Viera +Hired as Web Developer at Lightning Fruit +LinkedIn profile URL: https://www.linkedin.com/in/floviera + +--- + +Name: Naila Kaliyeva +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/naila-kaliyeva-a8863a181/ +Studied in the United States of America campus +Video testimonial: https://www.youtube.com/watch?v=_rtJgxuY4i4 +Written testimonial: I love 4Geeks Academy's approach to teaching students. There are always at least three tutors who will make sure you master your skills and will not give up on you if there's something you don't understand. They never leave my questions unanswered, regardlessof how obvious they may seem..and the atmosphere in the school is very warm. I'm grateful to you guys for providing 24 hour access to school, so we can work any time thatis convenient for us. Thank you, 4Geeks!!! + +--- + +Name: Azul Botaya +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/azul-botaya-31669b151/ +Studied in the United States of America campus +Written testimonial: I felt lost in my career and could not see clear goals for myself anymore. I came across this great opportunity to join this community of knowledge and, to top it all off, great humans! I found myself able to commit to something very interesting with endless options to create my career as a graphic designer more powerful without having to stop what I was doing within a perfect part-time cohort. I now have all kinds of new tools I learned there along the way, and there is a new comfort in knowing that I can always go back and keep a new comfort in knowing that I can always go back and keep + +--- + +Name: Charles Fabricius +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/charles-fabricius/ +Studied in the United States of America campus +Written testimonial: Overall just a great group of people with a common goal. I came into 4Geeks with little to no knowledge about coding and after 16 weeks I was building projects I could have never imagined I would be able to build. They will provide you with the knowledge and tools to become a successful developer ready for hire.... Ask as many questions as you need andthey will be happy to help. Not to mention the lifetime support you get even after completing the Bootcamp. + +--- + +Name: Fernando Funez +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/fernando-funezdev/ +Video testimonial: https://www.youtube.com/watch?v=_rtJgxuY4i4 +Written testimonial: I highly recommend this coding boot camp!!!! Before 4Geeks I never had any experience with code - I didn't know where to start. Within 10 weeks I was able to grasp the core concepts of being a developer. The staff and Mentors are awesome... enroll today if yoou want to go from zero to hero in 10 weeks and start developing your own apps. + +--- + +Name: Salvador Desravines +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/salvador-desravines-b85b4a196/ +Written testimonial: This program was definitely one of the hardest things I've done in my life. It was 16 weeks of constant work and practice. All things in life worth having is not going to be easily obtained. If you can stick with it and follow what the teachers are teaching you, you will succeed. + +--- + +Name: Jorge Montes +Hired as Full Stack Developer +Written testimonial: Now I think that I can actually know how to solve the issues that I face when I'm coding and the professors have been a great help along the process. I would recommend this Bootcamp to everyone. + +--- + +Name: Fidel Rosell +Hired as Software Engineer at UDT +LinkedIn profile URL: https://www.linkedin.com/in/fidelrosell/ +Written testimonial: My experience in 4Geeks Academy was and is the best. The instructors and TAs will help you in a blink. 4Geeks' Slack should be renamed to 4Geeks Overflow. The response time is fast. The responses are strong and different solutions are provided. If you have an interview and you want to refresh your knowledge or exercise do not hesitate to go to 4Geeks, you will find someone ready to help you. + +--- + +Name: Jordan +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/jordan-aguiriano/ + +--- + +Name: Gabriela +Hired as Full Stack Developer +LinkedIn profile URL: https://www.linkedin.com/in/gabriela-rodriguez-2b5235187/ + +--- + +Name: Guensie Grecy +Hired as Third Party Risk at UKG +LinkedIn profile URL: https://www.linkedin.com/in/guensiegrecy/ +Video testimonial: https://www.youtube.com/watch?v=LvnxLyqaQDo +Written testimonial: I was a lawyer for 6 years and I decided to change my career. I attended 4Geeks Academy, a coding bootcamp, that was last year (2018), I graduated in August, and after graduating in October, I was able to get a job as a web developer. I had no background whatsoever in coding. I didn't know anything about anything computer-technology wise, so that's an encouragement because it's possible! + +--- + +Name: Luis Rivera +Became a QA analyst after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/luis-rivera-68779714b/ +Github profile URL: https://github.com/Luis846 +Video testimonial: https://www.youtube.com/watch?v=OZfv9kYl0_o + +--- + +Name: Naila Kaliyeva +Became a Web Developer after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/naila-kaliyeva-a8863a181/ +Github profile URL: https://github.com/nailakaliyeva +Video testimonial: https://www.youtube.com/watch?v=OZfv9kYl0_o + +--- + +Name: Jonathan Perez +Became a Business Administration after the bootcamp +Github profile URL: https://github.com/Jphendrix51 +Video testimonial: https://www.youtube.com/watch?v=TTjSZ2Lud2E + +--- + +Name: Sebastian Pinto +Became a Pharmacy Owner after the bootcamp +Github profile URL: https://github.com/sebastianpd1 +Video testimonial: https://www.youtube.com/watch?v=TTjSZ2Lud2E + +--- + +Name: Paola Castro +Became a Fuel Industry after the bootcamp +Github profile URL: https://github.com/paocastrob +Video testimonial: https://www.youtube.com/watch?v=TTjSZ2Lud2E + +--- + +Name: Darius Bounds +Became a Interaction Designer after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/darius-b-7511255b/ +Github profile URL: https://github.com/dcbounds +Video testimonial: https://www.youtube.com/watch?v=KTeOIU3eVrc + +--- + +Name: Christian Valdes +Became a Government Project Manager after the bootcamp +Github profile URL: https://github.com/CxJAY26 +Video testimonial: https://www.youtube.com/watch?v=KTeOIU3eVrc + +--- + +Name: Fernando Funes +Became a Web Developer after the bootcamp +Github profile URL: https://github.com/ferfunes + +--- + +Name: George Mihov +Became a Web Developer and Mentor after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/gmihov/ +Github profile URL: https://github.com/gmihov001 + +--- + +Name: Samir Benzada +Became a Teacher Assistant after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/samir-benzada-5ab431196/ +Github profile URL: https://github.com/samirbenzada + +--- + +Name: Victor Mori +Became a Web Developer after the bootcamp + +--- + +Name: Jordan Aguiriano +Became a Web Developer after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/jordan-aguiriano/ +Github profile URL: https://github.com/JordanAguiriano +Video testimonial: https://www.youtube.com/watch?v=cKcZD0_1IKk + +--- + +Name: Gabriela Rodriguez +Became a Web Developer after the bootcamp +LinkedIn profile URL: https://www.linkedin.com/in/gabriela-rodriguez-2b5235187/ +Github profile URL: https://github.com/gabsssrod +Video testimonial: https://www.youtube.com/watch?v=cKcZD0_1IKk \ No newline at end of file diff --git a/src/assets/css/utils.css b/src/assets/css/utils.css index dd1e8b0af..d25471481 100644 --- a/src/assets/css/utils.css +++ b/src/assets/css/utils.css @@ -40,93 +40,84 @@ text-transform: capitalize; } - /* Dots */ -.slick-dotted.slick-slider -{ - margin-bottom: 30px; +.slick-dotted.slick-slider { + margin-bottom: 30px; } -.slick-dotss -{ - position: absolute; - bottom: -25px; +.slick-dotss { + position: absolute; + bottom: -25px; - display: block; + display: block; - width: 100%; - padding: 0; - margin: 0; + width: 100%; + padding: 0; + margin: 0; - list-style: none; + list-style: none; - text-align: center; + text-align: center; } -.slick-dotss li -{ - position: relative; +.slick-dotss li { + position: relative; - display: inline-block; + display: inline-block; - width: 20px; - height: 20px; - margin: 0 3px; - padding: 0; + width: 20px; + height: 20px; + margin: 0 3px; + padding: 0; - cursor: pointer; + cursor: pointer; } -.slick-dotss li button -{ - font-size: 0; - line-height: 0; +.slick-dotss li button { + font-size: 0; + line-height: 0; - display: block; + display: block; - width: 20px; - height: 20px; - padding: 5px; + width: 20px; + height: 20px; + padding: 5px; - cursor: pointer; + cursor: pointer; - color: transparent; - border: 0; - outline: none; - background: transparent; + color: transparent; + border: 0; + outline: none; + background: transparent; } .slick-dotss li button:hover, -.slick-dotss li button:focus -{ - outline: none; +.slick-dotss li button:focus { + outline: none; } .slick-dotss li button:hover:before, -.slick-dotss li button:focus:before -{ - opacity: 1; +.slick-dotss li button:focus:before { + opacity: 1; } -.slick-dotss li button:before -{ - font-family: 'slick'; - font-size: 11px; - line-height: 20px; +.slick-dotss li button:before { + font-family: "slick"; + font-size: 11px; + line-height: 20px; - position: absolute; - top: 0; - left: 0; + position: absolute; + top: 0; + left: 0; - width: 20px; - height: 20px; + width: 20px; + height: 20px; - content: '•'; - text-align: center; + content: "•"; + text-align: center; - opacity: .25; - color: black; + opacity: 0.25; + color: black; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } -.slick-dotss li.slick-active button:before -{ - opacity: .75; - color: #0097CD; +.slick-dotss li.slick-active button:before { + opacity: 0.75; + color: #0097cd; } diff --git a/src/components/AlumniProjects/index.js b/src/components/AlumniProjects/index.js index ca404f175..159b81148 100644 --- a/src/components/AlumniProjects/index.js +++ b/src/components/AlumniProjects/index.js @@ -8,7 +8,7 @@ import ReactPlayer from "../ReactPlayer"; import Slider from "react-slick"; import "slick-carousel/slick/slick.css"; import "slick-carousel/slick/slick-theme.css"; -import "../../assets/css/utils.css" +import "../../assets/css/utils.css"; const AlumniProjects = ({ lang, @@ -18,7 +18,7 @@ const AlumniProjects = ({ playerHeight, title, paragraph, - yml + yml, }) => { const [projects, setProjects] = useState( lang[0].node.projects.slice(0, limit || lang[0].node.projects.length) @@ -105,27 +105,28 @@ const AlumniProjects = ({ // } // }; return ( -
- {(title !== undefined && paragraph !== undefined) || yml && ( - -
-

- {yml.heading || title} -

- - {yml.sub_heading || paragraph} - -
-
- )} + {(title !== undefined && paragraph !== undefined) || + (yml && ( + +
+

+ {yml.heading || title} +

+ + {yml.sub_heading || paragraph} + +
+
+ ))} {projects?.map((item, index) => { return ( @@ -189,7 +190,12 @@ const AlumniProjects = ({

Project: {`${item.project_name}`}

-

+

{" "} {`> MADE BY:`}

@@ -256,7 +262,11 @@ const AlumniProjects = ({ {" "} {`> DESCRIPTION:`} - + {item.project_content}
diff --git a/src/components/Icon/set/group.js b/src/components/Icon/set/group.js index 1700258d0..db84b97e3 100644 --- a/src/components/Icon/set/group.js +++ b/src/components/Icon/set/group.js @@ -1,21 +1,20 @@ import React from "react"; export default (props) => ( - - - - - ); - + + + + +); diff --git a/src/components/Icon/set/hands.js b/src/components/Icon/set/hands.js index 1b95b93fd..48eed817d 100644 --- a/src/components/Icon/set/hands.js +++ b/src/components/Icon/set/hands.js @@ -1,20 +1,20 @@ import React from "react"; export default (props) => ( - - - - - ); + + + + +); diff --git a/src/components/Icon/set/stairswflag.js b/src/components/Icon/set/stairswflag.js index 1a68284ff..3b5321744 100644 --- a/src/components/Icon/set/stairswflag.js +++ b/src/components/Icon/set/stairswflag.js @@ -1,20 +1,20 @@ import React from "react"; export default (props) => ( - - - - - ); + + + + +); diff --git a/src/components/Icon/set/yellowhat.js b/src/components/Icon/set/yellowhat.js index 0cbc4b21c..93b6436c5 100644 --- a/src/components/Icon/set/yellowhat.js +++ b/src/components/Icon/set/yellowhat.js @@ -1,24 +1,24 @@ import React from "react"; export default (props) => ( - - - - - - ); + + + + + +); diff --git a/src/components/Instructors/index.js b/src/components/Instructors/index.js index 95baa504e..aa538e9f7 100644 --- a/src/components/Instructors/index.js +++ b/src/components/Instructors/index.js @@ -80,9 +80,11 @@ const Instructors = ({ instructors?.length >= 1 && ( { return (

{title}

- { - paragraph && - {paragraph} - } - + {paragraph && {paragraph}}
); }; @@ -1144,8 +1140,8 @@ export const landingSections = { flexDirection="column" margin="0" padding="0" - padding_tablet="0" - position="relative" + padding_tablet="0" + position="relative" >
{ const [showVideo, setShowVideo] = React.useState(false); @@ -213,7 +213,7 @@ const Player = ({ position="relative" boxShadow={image_thumb?.shadow && "20px 15px 0px 0px rgba(0,0,0,1)"} //border={image_thumb?.shadow && "3px solid black"} - style={imgStyles && {...JSON.parse(image_thumb?.style)}} + style={imgStyles && { ...JSON.parse(image_thumb?.style) }} > {id && ( )} {thumb && thumb.childImageSharp ? ( @@ -272,13 +272,13 @@ const Player = ({ export default Player; Player.defaultProps = { - onPlay: () => { }, - onPause: () => { }, - onEnd: () => { }, - onError: () => { }, - onStateChange: () => { }, - onPlaybackRateChange: () => { }, - onPlaybackQualityChange: () => { }, + onPlay: () => {}, + onPause: () => {}, + onEnd: () => {}, + onError: () => {}, + onStateChange: () => {}, + onPlaybackRateChange: () => {}, + onPlaybackQualityChange: () => {}, imageSize: "default", playerVars: {}, noCookies: false, @@ -320,11 +320,11 @@ Player.propTypes = { }; const Play = styled.button` - background: ${(props) => props.background || "rgba(0, 0, 0, 0.7)"} ; + background: ${(props) => props.background || "rgba(0, 0, 0, 0.7)"}; border-radius: 3px; color: ${(props) => props.white}; font-size: 1em; - height: 36px; + height: 36px; padding: 0; text-align: center; text-indent: 0.1em; @@ -333,9 +333,13 @@ const Play = styled.button` position: absolute !important; top: 50%; left: 50%; - transform: ${(props) => props.transformPlay || "translateX(-50%) translateY(-50%)"}; {/*translateX(-50%) translateY(-50%);*/} + transform: ${(props) => + props.transformPlay || "translateX(-50%) translateY(-50%)"}; + { + /*translateX(-50%) translateY(-50%);*/ + } border: none; - opacity: ${(props) => props.opacity || "0.8"}; + opacity: ${(props) => props.opacity || "0.8"}; cursor: pointer; z-index: 9; &:hover { diff --git a/src/components/Sections/index.js b/src/components/Sections/index.js index 0b2a90248..f7e66b7bf 100644 --- a/src/components/Sections/index.js +++ b/src/components/Sections/index.js @@ -215,7 +215,7 @@ export const Div = styled.div` margin: ${(props) => props.margin_xs}; display: ${(props) => props.display_xs}; justify-content: ${(props) => - justifyContentOptions[props.justifyContent_xs]}; + justifyContentOptions[props.justifyContent_xs]}; order: ${(props) => props.order_xs}; border: ${(props) => props.border_xs}; border-top: ${(props) => props.borderTop_xs}; @@ -230,7 +230,7 @@ export const Div = styled.div` @media ${Devices.sm} { padding: ${(props) => props.padding_sm}; justify-content: ${(props) => - justifyContentOptions[props.justifyContent_sm]}; + justifyContentOptions[props.justifyContent_sm]}; height: ${(props) => props.height_sm}; position: ${(props) => props.position_sm}; margin: ${(props) => props.margin_sm}; @@ -250,16 +250,16 @@ export const Div = styled.div` } @media ${Devices.tablet} { flex: ${(props) => - props.flex_tablet || props.size_tablet - ? `0 0 ${(props.size_tablet / 12) * 100}%` - : null}; + props.flex_tablet || props.size_tablet + ? `0 0 ${(props.size_tablet / 12) * 100}%` + : null}; flex-flow: ${(props) => props.flexFlow_tablet}; max-width: ${(props) => - props.size_tablet ? `${(props.size_tablet / 12) * 100}%` : null}; + props.size_tablet ? `${(props.size_tablet / 12) * 100}%` : null}; max-width: ${(props) => - props.maxWidth_tablet - ? props.maxWidth_tablet - : props.size_tablet + props.maxWidth_tablet + ? props.maxWidth_tablet + : props.size_tablet ? `${(props.size_tablet / 12) * 100}%` : null}; align-self: ${(props) => props.alignSelf_tablet}; @@ -283,7 +283,7 @@ export const Div = styled.div` height: ${(props) => props.height_tablet}; flex: ${(props) => props.flex_tablet}; flex-shrink: ${(props) => - props.flexShrink_tablet ? props.flexShrink_tablet : 1}; + props.flexShrink_tablet ? props.flexShrink_tablet : 1}; flex-wrap: ${(props) => props.flexWrap_tablet}; border: ${(props) => props.border_tablet}; border-top: ${(props) => props.borderTop_tablet}; @@ -300,7 +300,7 @@ export const Div = styled.div` grid-row: ${(props) => props.gridRow_tablet}; justify-self: ${(props) => props.justifySelf_tablet}; justify-content: ${(props) => - justifyContentOptions[props.justifyContent_tablet]}; + justifyContentOptions[props.justifyContent_tablet]}; z-index: ${(props) => props.zIndex_tablet}; top: ${(props) => props.top_tablet}; bottom: ${(props) => props.bottom_tablet}; @@ -312,11 +312,11 @@ export const Div = styled.div` } @media ${Devices.md} { flex: ${(props) => - props.size_md ? `0 0 ${(props.size_md / 12) * 100}%` : null}; + props.size_md ? `0 0 ${(props.size_md / 12) * 100}%` : null}; max-width: ${(props) => - props.maxWidth_md - ? props.maxWidth_md - : props.size_md + props.maxWidth_md + ? props.maxWidth_md + : props.size_md ? `${(props.size_md / 12) * 100}%` : null}; min-width: ${(props) => props.minWidth_md}; @@ -326,7 +326,7 @@ export const Div = styled.div` gap: ${(props) => (props) => props.gap_md}; flex-wrap: ${(props) => props.flexWrap_md}; justify-content: ${(props) => - justifyContentOptions[props.justifyContent_md]}; + justifyContentOptions[props.justifyContent_md]}; text-align: ${(props) => props.textAlign_md}; align-items: ${(props) => props.alignItems_md}; margin: ${(props) => props.margin_md}; @@ -345,7 +345,7 @@ export const Div = styled.div` @media ${Devices.lg} { display: ${(props) => props.display_lg}; justify-content: ${(props) => - justifyContentOptions[props.justifyContent_lg]}; + justifyContentOptions[props.justifyContent_lg]}; padding: ${(props) => props.padding_lg}; max-width: ${(props) => props.maxWidth_lg}; min-width: ${(props) => props.minWidth_lg}; @@ -387,18 +387,18 @@ export const Grid = styled(Div)` grid-template-areas: ${(props) => props.gridTemplateAreas}; @media ${Devices.xxs} { grid-template-columns: ${(props) => - props.columns_xxs ? `repeat(${props.columns_xxs}, 1fr)` : null}; + props.columns_xxs ? `repeat(${props.columns_xxs}, 1fr)` : null}; } @media ${Devices.xs} { grid-template-columns: ${(props) => - props.columns_xs ? `repeat(${props.columns_xs}, 1fr)` : null}; + props.columns_xs ? `repeat(${props.columns_xs}, 1fr)` : null}; display: ${(props) => props.display_xs || "grid"}; } @media ${Devices.sm} { grid-template-columns: ${(props) => - props.gridTemplateColumns_sm - ? `repeat(${props.gridTemplateColumns_sm}, 1fr)` - : null}; + props.gridTemplateColumns_sm + ? `repeat(${props.gridTemplateColumns_sm}, 1fr)` + : null}; display: ${(props) => props.display_sm || "grid"}; } @media ${Devices.tablet} { @@ -407,13 +407,13 @@ export const Grid = styled(Div)` display: ${(props) => props.display_tablet || "grid"}; width: ${(props) => props.width_tablet}; grid-template-columns: ${(props) => - props.gridTemplateColumns_tablet - ? `${props.gridTemplateColumns_tablet}` - : "2fr repeat(12, 1fr) 2fr"}; + props.gridTemplateColumns_tablet + ? `${props.gridTemplateColumns_tablet}` + : "2fr repeat(12, 1fr) 2fr"}; grid-template-rows: ${(props) => - props.gridTemplateRows_tablet - ? `repeat(${props.gridTemplateRows_tablet})` - : null}; + props.gridTemplateRows_tablet + ? `repeat(${props.gridTemplateRows_tablet})` + : null}; grid-gap: ${(props) => props.gridGap_tablet}; grid-auto-rows: ${(props) => props.gridAutoRows_tablet}; grid-column: ${(props) => props.gridColumn_tablet}; @@ -425,9 +425,9 @@ export const Grid = styled(Div)` margin: ${(props) => props.margin_md}; grid-template-columns: ${(props) => props.gridTemplateColumns_md}; grid-template-rows: ${(props) => - props.gridTemplateRows_md - ? `repeat(${props.gridTemplateRows_md})` - : null}; + props.gridTemplateRows_md + ? `repeat(${props.gridTemplateRows_md})` + : null}; grid-gap: ${(props) => props.gridGap_md}; grid-column: ${(props) => props.gridColumn_md}; display: ${(props) => props.display_md || "grid"}; @@ -456,28 +456,28 @@ export const Old_Grid = styled.div` margin: ${(props) => props.margin}; @media ${Devices.xxs} { grid-template-columns: ${(props) => - props.columns_xxs ? `repeat(${props.columns_xxs}, 1fr)` : null}; + props.columns_xxs ? `repeat(${props.columns_xxs}, 1fr)` : null}; } @media ${Devices.xs} { grid-template-columns: ${(props) => - props.columns_xs ? `repeat(${props.columns_xs}, 1fr)` : null}; + props.columns_xs ? `repeat(${props.columns_xs}, 1fr)` : null}; } @media ${Devices.sm} { grid-template-columns: ${(props) => - props.columns_sm ? `repeat(${props.columns_sm}, 1fr)` : null}; + props.columns_sm ? `repeat(${props.columns_sm}, 1fr)` : null}; } @media ${Devices.tablet} { grid-template-columns: ${(props) => - props.columns_tablet ? `repeat(${props.columns_tablet}, 1fr)` : null}; + props.columns_tablet ? `repeat(${props.columns_tablet}, 1fr)` : null}; grid-template-rows: ${(props) => - props.rows_tablet ? `repeat(${props.rows_tablet}, 5vw)` : null}; + props.rows_tablet ? `repeat(${props.rows_tablet}, 5vw)` : null}; padding: ${(props) => props.padding_tablet}; } @media ${Devices.md} { grid-template-columns: ${(props) => - props.columns_md ? `repeat(${props.columns_md})` : null}; + props.columns_md ? `repeat(${props.columns_md})` : null}; grid-template-rows: ${(props) => - props.rows_md ? `repeat(${props.rows_md})` : null}; + props.rows_md ? `repeat(${props.rows_md})` : null}; grid-gap: ${(props) => props.gridGap_md}; height: ${(props) => props.height_md}; padding: ${(props) => props.padding_md}; @@ -486,16 +486,16 @@ export const Old_Grid = styled.div` } @media ${Devices.lg} { grid-template-columns: ${(props) => - props.columns_lg ? `repeat(${props.columns_lg}, 1fr)` : null}; + props.columns_lg ? `repeat(${props.columns_lg}, 1fr)` : null}; padding: ${(props) => props.padding_lg}; } @media ${Devices.xl} { grid-template-columns: ${(props) => - props.columns_xl ? `repeat(${props.columns_xl}, 1fr)` : null}; + props.columns_xl ? `repeat(${props.columns_xl}, 1fr)` : null}; } @media ${Devices.xxl} { grid-template-columns: ${(props) => - props.columns_xxl ? `repeat(${props.columns_xxl}, 1fr)` : null}; + props.columns_xxl ? `repeat(${props.columns_xxl}, 1fr)` : null}; } `; @@ -647,6 +647,9 @@ export const GridContainer = ({ childHeight, displayChild, displayChild_tablet, + displayChild_xs, + displayChild_sm, + displayChild_md, columns_sm, justifyContentChild, }) => { @@ -686,7 +689,10 @@ export const GridContainer = ({ Aprovecha esta alianza y forma parte de la evolución tecnológica a nivel mundial ¡Comienza HOY!

+ button: + text: "Únete a la Academia" + background: black + color: white + hover_color: "#white" + path: "#top" badges: diff --git a/src/data/landing/costa-rica-curso-de-programacion.es.yml b/src/data/landing/costa-rica-curso-de-programacion.es.yml index 7e8620cb0..44584b998 100644 --- a/src/data/landing/costa-rica-curso-de-programacion.es.yml +++ b/src/data/landing/costa-rica-curso-de-programacion.es.yml @@ -91,6 +91,29 @@ follow_bar: # ⬇ FROM HERE ON YOU CAN COMMENT ANYTHING TO HIDE IT ON THE LANDING ⬇ # components: + - name: some_id + position: 3 + layout: two_column_right + background: "lightBlue2" + image: + style: '{ "border" : "3px solid black" }' + shadow: true + src: "../../../static/images/testimonials/Mattia-Tozzi-testimonial.jpg" + video: "B01-eTfgqqc" + heading: + text: "El viaje de Mattia Tozzi en 4geeks Academy y como cambió su vida profesional." + #xl lg md sm xs + font_size: ["40px", "34px", "34px", "25px", "20px"] + content: + text: "Conoce la historia inspiradora de Mattia Tozzi, quien, buscando un cambio en su carrera, se unió a 4Geeks Academy. Su experiencia demuestra cómo la dedicación y el aprendizaje en este bootcamp lo llevaron a convertirse en un profesional altamente capacitado." + font_size: ["16px"] + button: + text: "Unete a la academia!" + path: "#bottom" + color: "white" + background: "black" + hover: "lightBlue" + - name: top_coding_bootcamp position: 1 layout: two_column_left @@ -128,7 +151,7 @@ rating_reviews: url: "" badges: - position: 3 + position: 7 heading: "4Geeks Academy cuenta con premios y reconocimientos que validan su excelencia" program_details: @@ -148,3 +171,4 @@ who_is_hiring: heading: "¿Quién contrata a nuestros alumnos?" sub_heading: "84% de nuestros estudiantes que completaron el proceso de GeekFORCE han conseguido trabajo luego de haberse graduado (incluso dentro de los sigiuientes 100 días)" + diff --git a/src/data/landing/madrid-curso-de-programacion.es.yml b/src/data/landing/madrid-curso-de-programacion.es.yml index 10ff1d07b..8ef34693e 100644 --- a/src/data/landing/madrid-curso-de-programacion.es.yml +++ b/src/data/landing/madrid-curso-de-programacion.es.yml @@ -9,7 +9,7 @@ meta_info: template: "landing_a" # <--- choose your landing template redirects: # <--- URL redirections to avoid 404 errors - ["/landing/coding-course"] + ["/landing/coding-course", "/es/landing/curso-de-programacion"] # Set a particular course or location to the landing page # this UTM fields will be also included in the CRM contact @@ -127,12 +127,12 @@ geeks_vs_others: total_rows: 5 why_4geeks: - position: 5 + position: 6 heading: "¿Por qué debes estudiar en 4Geeks Academy?" sub_heading: " " who_is_hiring: - position: 6 + position: 7 limit: 4 heading: "Empresas que contratan a nuestros estudiantes" sub_heading: "Más de 500 partners y más de 150 vacantes abiertas como Full-Stack Developer" @@ -143,6 +143,29 @@ who_is_hiring: # sub_heading: "Take a look at our previous student projects" components: + - name: some_id + position: 5 + layout: two_column_right + background: "lightYellow" + image: + style: '{ "border" : "3px solid black" }' + shadow: true + src: "../../../static/images/testimonials/Mattia-Tozzi-testimonial.jpg" + video: "B01-eTfgqqc" + heading: + text: "El viaje de Mattia Tozzi en 4geeks Academy y como cambió su vida profesional." + #xl lg md sm xs + font_size: ["40px", "34px", "34px", "25px", "20px"] + content: + text: "Descubre la historia de Mattia Tozzi, quien decidió unirse a 4Geeks Academy en busca de un cambio en su carrera profesional. Su experiencia demuestra cómo la dedicación y el aprendizaje en este bootcamp lo llevaron a convertirse en un profesional altamente capacitado en España." + font_size: ["16px"] + button: + text: "Unete a la academia!" + path: "#bottom" + color: "white" + background: "black" + hover: "lightBlue" + - name: python_y_javascript position: 1 layout: two_column_right diff --git a/src/data/landing/mexico-curso-programacion.es.yml b/src/data/landing/mexico-curso-programacion.es.yml index 7e184cd52..142c0165d 100644 --- a/src/data/landing/mexico-curso-programacion.es.yml +++ b/src/data/landing/mexico-curso-programacion.es.yml @@ -92,7 +92,7 @@ follow_bar: # rating_reviews: - position: 2 + position: 3 heading: "Lee acerca de nosotros" rating_list: - alt: "Career Karma" @@ -139,3 +139,26 @@ who_is_hiring: heading: "¿Quién contrata a nuestros alumnos?" sub_heading: "84% de nuestros estudiantes que completaron el proceso de GeekFORCE han conseguido trabajo luego de haberse graduado (incluso dentro de los sigiuientes 100 días)" +components: + - name: some_id + position: 2 + layout: two_column_right + background: "lightBlue2" + image: + style: '{ "border" : "3px solid black" }' + # shadow: true + src: "../../../static/images/testimonials/samantha-review.png" + video: "https://www.youtube.com/watch?v=32a-phct9I0" + heading: + text: "4Geeks en México La Elección de Samantha para su Bootcamp Ideal" + #xl lg md sm xs + font_size: ["40px", "34px", "34px", "25px", "20px"] + content: + text: "La excelencia en el contenido del curso, la dedicada mentoría individual y las sólidas colaboraciones industriales son solo algunos de los aspectos que destacan a 4Geeks. Además, el historial de éxito de los graduados respalda la reputación de la institución." + font_size: ["16px"] + button: + text: "Unete a la academia!" + path: "https://4geeksacademy.com/us/coding-campus/coding-bootcamp-mexico" + color: "white" + background: "black" + hover: "lightBlue" \ No newline at end of file diff --git a/src/data/landing/no-excuses.us.yml b/src/data/landing/no-excuses.us.yml index bb727d5c6..972fe8f16 100644 --- a/src/data/landing/no-excuses.us.yml +++ b/src/data/landing/no-excuses.us.yml @@ -27,7 +27,7 @@ form: # always the first_name, email and phone will be mandatory if added. fields: ["full_name", "phone", "email"] heading: "Join our award-winning Coding Program" - motivation: "Fill out the form and get the scholarship towards your tuition at 4Geeks. Only 85 seats remain available." + motivation: "Fill out the form and get a Scholarship to reduce your tuition at 4Geeks. A few seats remain available." button_label: Get more info Now redirect: null #you can redirect to another url or entirely diffrent website @@ -39,7 +39,7 @@ apply_schollarship: # form that is displayed at the end of the landing # jumbotron on the top (cannot be commented out) header_data: background: "#FFF1D1" - tagline: No Excuses. Boost your career. Money is what you’ll make! + tagline: No Excuses. The Go-to Coding Bootcamp in Florida. badge: "../../../static/images/badges/Course-Report-Badge-2023.png" image_filter: brightness(0.3) @@ -50,9 +50,9 @@ features: styles: '{ "fontSize": "20px", "margin": "10px 0px 10px 0px" }' text: With our expertise and your hard work, you'll be a professional developer in just 18 weeks! bullets: - - Scholarships available. Award winning Bootcamp at the Best pricing - - Unlimited Mentorship and senior support FOREVER - - 84% placement rate + - Money is not excuse. Best pricing (ask for scholarships) + - Unlimited Mentorship and lifetime access to career services + - Award winning Florida Bootcamp (Miami, Orlando, Boca, and online!) - Job placement rate of 81% - "Part-time: it’s immersive but with a flexible schedule" diff --git a/src/prompt/prompt.awards.js b/src/prompt/prompt.awards.js new file mode 100644 index 000000000..2f0ff2179 --- /dev/null +++ b/src/prompt/prompt.awards.js @@ -0,0 +1,29 @@ +const fs = require("fs"); +const { toYML, loadYML } = require("../test/_utils"); + +async function generate() { + const max_tokens = 400; + console.log(`Starting to generate a prompt for all the academy awards`); + + const doc = loadYML(`${__dirname}/../data/page/awards.us.yml`); + let awards = doc.yaml.awards_list.map((old) => { + let _new = [ + `Award title: ${old.title}`, + `Description of the award: as ${old.paragraph}`, + ]; + // if(old.linkedin_url) _new.push(`LinkedIn profile URL: ${old.linkedin_url}`); + return _new.join("\n"); + }); + + fs.writeFileSync( + `./prompts/awards.prompt`, + [ + `The following are awards and recognitions 4Geeks Academy has received thru the years:`, + awards.join("\n\n---\n\n"), + `You can learn more about the awards here: https://4geeksacademy.com/us/${doc.yaml.meta_info.slug}`, + ].join("\n\n"), + "utf8" + ); + console.log(`Finished generating awards.`); +} +generate(); diff --git a/src/prompt/prompt.course.js b/src/prompt/prompt.course.js new file mode 100644 index 000000000..f6ccc56a2 --- /dev/null +++ b/src/prompt/prompt.course.js @@ -0,0 +1,47 @@ +const fs = require("fs"); +const { complete, getCourses } = require("./utils.js"); +const { toYML } = require("../test/_utils"); + +async function generate() { + console.log( + `Starting to generate a prompt for all the academy course offerings` + ); + const max_tokens = 400; + const courses = await getCourses(); + const activeCourses = Object.keys(courses).filter( + (slug) => courses[slug].meta_info.show_in_apply + ); + for (let courseSlug of activeCourses) { + console.log(`Summarizing prompt information for program: ${courseSlug}`); + const old = courses[courseSlug]; + const course = {}; + course.title = old.meta_info.title; + course.description = old.meta_info.description; + course.website = `https://4geeksacademy.com/us/coding-bootcamps/${old.meta_info.slug}`; + course.highlight = old.header.paragraph; + course.instructors = old.course_instructors.instructors; + course.about = old.details.about; + course.details = old.details.list; + course.duration = `${old.weeks} ${old.weeks_label}`; + course.modules = old.details_modules; + const raw = toYML(course); + + const answer = await complete({ + max_tokens, + system: `You are like a senior prompt engineer with deep coding knowledge, very familiar with the YML, CSV and JSON syntax.`, + user: `The following information is part of 4Geeks Academy courses and bootcamps. +Read and understand the information and write a summary of the courses available. +Do not include any information about these instructions in your answer. +Include the word "stop" at the end of your answer. +Inlcude the website url for more information. +Be concise, don't add a summary at the end of the article. +Don't take more than ${max_tokens * 2} characters. +Here is the YML: ${raw}`, + }); + + if (!answer) fail(`Error building prompt for payment plans`); + fs.writeFileSync(`./prompts/${courseSlug}.prompt`, answer, "utf8"); + console.log(`Finished summarizing program: ${courseSlug}`); + } +} +generate(); diff --git a/src/prompt/prompt.location.js b/src/prompt/prompt.location.js new file mode 100644 index 000000000..89eb7a42b --- /dev/null +++ b/src/prompt/prompt.location.js @@ -0,0 +1,61 @@ +const fs = require("fs"); +const { complete, getLocations } = require("./utils.js"); +const { toYML } = require("../test/_utils"); + +async function generate() { + console.log( + `Starting to generate a prompt for all the academy campus and descriptions` + ); + let allLocationsPrompts = ""; + const max_tokens = 250; + const locations = await getLocations(); + const allSlugs = Object.keys(locations); + let campuses = {}; + for (let locationSlug of allSlugs) { + const old = locations[locationSlug]; + campuses[locationSlug] = {}; + campuses[locationSlug].region = old.meta_info.region; + campuses[locationSlug].available_modes = old.header.sub_header_highlighted; + campuses[locationSlug].phone_number = old.info_box.phone; + campuses[locationSlug].contact_email = old.meta_info.email; + campuses[locationSlug].relevant_information = old.images_box.content; + campuses[locationSlug].city = old.city; + campuses[locationSlug].country = old.country; + campuses[ + locationSlug + ].website = `https://4geeksacademy.com/us/coding-campus/${old.meta_info.slug}`; + campuses[locationSlug].social_media_urls = old.socials.map((s) => ({ + network: s.name, + url: s.link, + })); + + const raw = toYML(campuses[locationSlug]); + + console.log(`Generating summary for campus ${locationSlug}.`); + allLocationsPrompts += + "\n\nNext campus: " + + (await complete({ + max_tokens, + model: "gpt-3.5-turbo-instruct", + system: `You are like a senior prompt engineer with deep coding knowledge, very familiar with the YML, CSV and JSON syntax.`, + user: `The followings are the details about 4Geeks Academy ${ + old.city + }, ${old.country}, + Read and understand the information and write a summary of the campus. + Do not include any information about these instructions in your answer. + Start your summary with the location city and country, available modes, contact information, social media, address and relevant information. + Include the website url for more information about that campus. + Be concise, do not speak about the city in general, keep your focus on the campus offer. + Don't take more than ${max_tokens * 2} characters. + Here is the YML: ${raw}`, + })); + } + fs.writeFileSync( + `./prompts/locations.prompt`, + "4Geeks Academy is available in the following locations:" + + allLocationsPrompts, + "utf8" + ); + console.log(`Finished generating campus information prompt.`); +} +generate(); diff --git a/src/prompt/prompt.plans.js b/src/prompt/prompt.plans.js new file mode 100644 index 000000000..4c883ef25 --- /dev/null +++ b/src/prompt/prompt.plans.js @@ -0,0 +1,63 @@ +const fs = require("fs"); +const { complete, getCourses } = require("./utils.js"); +const { walk, loadYML, fail, success } = require("../test/_utils"); + +async function generate() { + const max_tokens = 400; + const courses = await getCourses(); + const activeCourses = Object.keys(courses).filter( + (slug) => courses[slug].meta_info.show_in_apply + ); + + let duplicateDescriptions = {}; + walk(`${__dirname}/../data/plans/`, async function (err, files) { + if (err) fail("Error reding the YML files: ", err); + const _files = files.filter( + (f) => f.indexOf(".yml") > 1 || f.indexOf(".yaml") > 1 + ); + + let langs = {}; + let slugs = {}; + for (let _path of _files) { + const doc = loadYML(_path); + const raw = doc && doc.raw_content; + if (doc.lang != "us") continue; + + // ignore inactive courses + if (!activeCourses.includes(doc.name)) { + console.log(`Ignored plans for course ${doc.name} because course.meta_info.show_in_apply=False`); + continue; + } + if (!raw) { + fail("Invalid content for YML " + _path); + continue; // Continue to the next file if YAML content is invalid + } + + console.log(`Generating prompt for course plans ${doc.name}`); + const answer = await complete({ + max_tokens, + system: `You are like a senior prompt engineer with deep coding knowledge, very familiar with the YML, CSV and JSON syntax.`, + user: `The following information is part of 4Geeks Academy plans and prices. +Read and understand the information and write a summary of the plans and prices available for each location one by one for: Spain, USA, Chile, Europe and Latam". +You will be given a list of plans that apply to one or more academy campus. +The name of the plan is inside the "scholarship" property. +Ignore the following properties: icons, slug and "recommended". +Do not include any information about these instructions in your answer. +Include the word "stop" at the end of your answer. +Be concise, don't add a summary at the end of the article. +Don't take more than ${max_tokens * 2} characters. +For example: +- Scholarship for part-time courses. Pay today or in 3 parts. Price: $6999 +- Income Share Agreement for full-time couses. Pay after you get a job. Price: $0 +Here is the YML: ${raw}`, + }); + if (!answer) fail(`Error building prompt for payment plans`); + fs.writeFileSync(`./prompts/plan-${doc.name}.prompt`, answer, "utf8"); + console.log(`Finshed generating prompt for course plans ${doc.name}`); + } + + success("Finished generating prompts"); + }); +} + +generate(); diff --git a/src/prompt/prompt.projects.js b/src/prompt/prompt.projects.js new file mode 100644 index 000000000..c283f1feb --- /dev/null +++ b/src/prompt/prompt.projects.js @@ -0,0 +1,37 @@ +const fs = require("fs"); +const { toYML, loadYML } = require("../test/_utils"); + +async function generate() { + const max_tokens = 400; + console.log(`Starting to generate a prompt for all the academy awards`); + + const doc = loadYML( + `${__dirname}/../data/components/alumni_projects/alumni_projects.us.yaml` + ); + let projects = doc.yaml.projects.map((old) => { + let _new = [ + `Project name: ${old.project_name}`, + `Description: ${old.project_content.replace(/(\r\n|\n|\r)/gm, "")}`, + `Video demonstration: ${old.project_video}`, + `Github URL: ${old.github_repo}`, + `Live URL: ${old.live_link}`, + `Buit by: ${old.alumni + .map((a) => `${a.first_name} ${a.last_name}`) + .join(" and ")} during the ${old.course} bootcamp`, + ]; + // if(old.linkedin_url) _new.push(`LinkedIn profile URL: ${old.linkedin_url}`); + return _new.join("\n"); + }); + + fs.writeFileSync( + `./prompts/projects.prompt`, + [ + `The following are capstone projects built by our students during our bootcamps:`, + projects.join("\n\n---\n\n"), + ``, + ].join("\n\n"), + "utf8" + ); + console.log(`Finished generating awards.`); +} +generate(); diff --git a/src/prompt/prompt.sh b/src/prompt/prompt.sh new file mode 100644 index 000000000..823e26830 --- /dev/null +++ b/src/prompt/prompt.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +node ./src/prompt/prompt.plans.js && +node ./src/prompt/prompt.course.js && +node ./src/prompt/prompt.location.js && +node ./src/prompt/prompt.students.js && +node ./src/prompt/prompt.awards.js && +node ./src/prompt/prompt.projects.js && +true \ No newline at end of file diff --git a/src/prompt/prompt.students.js b/src/prompt/prompt.students.js new file mode 100644 index 000000000..20981858e --- /dev/null +++ b/src/prompt/prompt.students.js @@ -0,0 +1,64 @@ +const fs = require("fs"); +const { toYML, loadYML } = require("../test/_utils"); + +async function generate() { + const max_tokens = 400; + console.log( + `Starting to generate a prompt for all the academy campus and descriptions` + ); + + const doc = loadYML( + `${__dirname}/../data/components/testimonials/testimonials.us.yaml` + ); + let testimonials = doc.yaml.testimonials.map((old) => { + let _new = [`Name: ${old.student_name}`, `Hired as ${old.short_content}`]; + if (old.linkedin_url) + _new.push(`LinkedIn profile URL: ${old.linkedin_url}`); + if (old.country) _new.push(`Studied in the ${old.country.name} campus`); + if (old.student_video) _new.push(`Video testimonial: ${old.student_video}`); + if (old.content) + _new.push( + `Written testimonial: ${old.content}`.replace(/(\r\n|\n|\r)/gm, "") + ); + return _new.join("\n"); + }); + + const doc2 = loadYML( + `${__dirname}/../data/components/alumni_projects/alumni_projects.us.yaml` + ); + let alumni_form_projects = doc2.yaml.projects + .reduce( + (prev, current) => + prev.concat( + ...current.alumni.map((al) => ({ + ...al, + student_video: current.project_video, + })) + ), + [] + ) + .map((old) => { + let _new = [ + `Name: ${old.first_name} ${old.last_name}`, + `Became a ${old.job_title} after the bootcamp`, + ]; + if (old.linkedin && old.linkedin != "") + _new.push(`LinkedIn profile URL: ${old.linkedin}`); + if (old.github && old.github != "") + _new.push(`Github profile URL: ${old.github}`); + if (old.twitter && old.twitter != "") + _new.push(`Twitter profile URL: ${old.twitter}`); + if (old.student_video && old.student_video != "") + _new.push(`Video testimonial: ${old.student_video}`); + return _new.join("\n"); + }); + + fs.writeFileSync( + `./prompts/students.prompt`, + `The following are 4Geeks Academy students:\n` + + testimonials.concat(alumni_form_projects).join("\n\n---\n\n"), + "utf8" + ); + console.log(`Finished generating testimonials.`); +} +generate(); diff --git a/src/prompt/utils.js b/src/prompt/utils.js new file mode 100644 index 000000000..01b68ee3f --- /dev/null +++ b/src/prompt/utils.js @@ -0,0 +1,100 @@ +const axios = require("axios"); +const dotenv = require("dotenv"); +dotenv.config(); +const { walk, loadYML, fail } = require("../test/_utils"); + +// Define the function to call the OpenAI API with an authorization token +async function complete({ system, user, model, max_tokens }) { + try { + // Define the OpenAI API endpoint URL + // gpt-3.5-turbo-16k, gpt-3.5-turbo-instruct + if (model == undefined) model = "gpt-3.5-turbo-16k"; + const is_chat = !model.includes("instruct"); + + let apiUrl = "https://api.openai.com/v1/completions"; + if (is_chat) apiUrl = "https://api.openai.com/v1/chat/completions"; + + // Define the headers with the authorization token + const headers = { + Authorization: `Bearer ${process.env.GATSBY_OPENAI_KEY}`, // Include the OpenAI token in the "Bearer" format + "Content-Type": "application/json", // Set the content type + }; + + // Define the data to send to the OpenAI API + + let requestData = { + model, + max_tokens, // Set the maximum number of tokens in the response as needed + }; + + if (is_chat) { + requestData.messages = [ + { + role: "system", + content: system, + }, + { + role: "user", + content: user, + }, + ]; + } else { + requestData.prompt = `${system} \n ${user}`; + } + + // Make an API request to the OpenAI API + const response = await axios.post(apiUrl, requestData, { headers }); + + // Process the OpenAI API response here + const interpretedContent = is_chat + ? response.data.choices[0].message.content + : response.data.choices[0].text; // Extract interpreted content + + // Return the interpreted content + return interpretedContent; + } catch (error) { + console.error("OpenAI API Request Error:", error.toString()); + } +} + +const getCourses = () => + new Promise((resolve, reject) => { + var courses = {}; + walk(`${__dirname}/../data/course`, function (err, files) { + if (err) fail("Error reding the YML files: ", err); + const _files = files.filter( + (f) => f.indexOf(".yml") > 1 || f.indexOf(".yaml") > 1 + ); + + for (let _path of _files) { + const doc = loadYML(_path); + //only english + if (doc.lang == "us") { + courses[doc.name] = { ...doc.yaml, raw: doc.raw }; + } + } + resolve(courses); + }); + }); + +const getLocations = () => + new Promise((resolve, reject) => { + let locations = {}; + walk(`${__dirname}/../data/location`, async function (err, files) { + if (err) fail("Error reding the YML files: ", err); + const _files = files.filter( + (f) => f.indexOf(".yml") > 1 || f.indexOf(".yaml") > 1 + ); + + for (let _path of _files) { + const doc = loadYML(_path); + //only english + if (doc.lang != "us") continue; + if (["europe", "online"].includes(doc.name)) continue; + locations[doc.name] = { ...doc.yaml, raw: doc.raw }; + } + resolve(locations); + }); + }); + +module.exports = { complete, getLocations, getCourses }; diff --git a/src/templates/landing_a.js b/src/templates/landing_a.js index 8e1278982..c6dc1e7ae 100644 --- a/src/templates/landing_a.js +++ b/src/templates/landing_a.js @@ -295,10 +295,7 @@ const Landing = (props) => { ); }; export const query = graphql` - query LandingAQuery( - $file_name: String! - $lang: String! - ) { + query LandingAQuery($file_name: String!, $lang: String!) { allPageYaml( filter: { fields: { file_name: { regex: "/geekpal/" }, lang: { eq: $lang } } diff --git a/src/test/_utils.js b/src/test/_utils.js index c7e1fe849..09b0b5ca1 100644 --- a/src/test/_utils.js +++ b/src/test/_utils.js @@ -69,6 +69,9 @@ const walk = function (dir, done) { }); }; +const toYML = (obj) => { + return jsyaml.dump(obj); +}; const loadYML = (pathToFile) => { const content = fs.readFileSync(pathToFile, "utf8"); try { @@ -91,7 +94,7 @@ const loadYML = (pathToFile) => { const type = m[1] === "data" ? m[2] : m[1]; - return { yaml, name, lang, type, path }; + return { yaml, name, lang, type, path, raw_content: content }; } catch (error) { console.error(error); return null; @@ -243,6 +246,7 @@ const checkForLanguages = (slugs, folder_name) => { module.exports = { walk, loadYML, + toYML, loadMD, empty, fail, diff --git a/static/images/testimonials/Mattia-Tozzi-testimonial.jpg b/static/images/testimonials/Mattia-Tozzi-testimonial.jpg new file mode 100644 index 000000000..669d5ea27 Binary files /dev/null and b/static/images/testimonials/Mattia-Tozzi-testimonial.jpg differ diff --git a/static/images/testimonials/samantha-review.png b/static/images/testimonials/samantha-review.png new file mode 100644 index 000000000..572619aaa Binary files /dev/null and b/static/images/testimonials/samantha-review.png differ