In this post, I will cover:

  • What Flows are
  • Use Case: Video Transcription for Course Offer Creation
  • Practice: Flow Structure
  • Practice: Exploring the Code
  • Results: Messages Generated for the Course Offer

If you’d like to dive deeper into using AI Agents with CrewAI, click here to check out other posts.

What Flows are

Flows are a feature in CrewAI that simplify the development of more complex applications. Within a Flow, you can combine multiple Crews — which are responsible for structuring agents, defining tasks, and ensuring their execution — along with standard Python code.

You can combine Python code and Crews in various ways. To illustrate, the image below shows 2 Flows.

The first Flow (on the left) runs a Python script, then a Crew with a sequential process, and finally another Crew with a hierarchical process. The second Flow (on the right) also starts with Python code, then runs 2 Crews with sequential processes in parallel, followed by another Python script, and ends with a final Crew.

CrewAI provides several useful features within a Flow. The most common are:

  • @start is a decorator that marks the starting point of the Flow.
  • @listen is a decorator that ensures a method only runs after the method it’s listening to has completed.
  • and_ is a function that makes a method run only after all specified methods have finished executing.
  • or_ is a function that allows a method to run as soon as at least one of the specified methods is completed.

If you’d like to dive deeper into Flows and their features, click here to access the official documentation.

Use Case: Video Transcription for Course Offer Creation

The use case involves offering an introductory Python programming course to a Lead who is an undergraduate student in Computer Science.

The video used was sourced from YouTube (click here to watch it), and I also used ChatGPT to help simulate the Lead’s resume in Markdown format.

Click the arrow to expand and view the Lead’s resume. 🔽

João Silva

Telefone: +55 (81) 9 0000-0000
Localização: João Pessoa, Brasil
E-mail: joaosilva@email.com
LinkedIn: linkedin.com/in/joaosilva
GitHub: github.com/joaosilva


Resume

I am a Computer Science undergraduate passionate about technology and problem-solving.
I hold a technical diploma in Informatics and have a strong foundation in logical reasoning and mathematics.
My skills include basic knowledge of web development, databases, and networking.
I am constantly learning and improving through online courses and practical exercises.
I seek my first opportunity in the technology field where I can apply my knowledge, collaborate with a team, and grow professionally.


Main Technologies

HTML · CSS · JavaScript · Git · MySQL · Networking Fundamentals · Logic and Algorithms


Academic Education

(01-2023 – present) Bachelor’s degree in Computer Science
Federal University of Paraíba – João Pessoa, Brasil

(01-2020 – 12-2022) Technical Course in Informatics
ETEC – Escola Técnica Estadual – João Pessoa, Brasil


Projects and Learning Experience

Even without formal job experience, I have developed some projects and completed practical activities during my technical course and personal studies:

  • Personal Portfolio Website: Built using HTML, CSS, and JavaScript to showcase my projects and contact information.
  • Simple Inventory System: Developed with basic CRUD functionality using text files for data storage.
  • Database Management: Designed basic relational databases using MySQL during school projects.
  • Basic Networking Configuration: Gained experience configuring networks and understanding IP addressing and routing during lab practices.

Certifications

  • 01-2025 – Basics of Computer Networking – Cisco Networking Academy
  • 12-2024 – HTML and CSS for Beginners – Udemy
  • 11-2024 – JavaScript Essentials – DIO (Digital Innovation One)
  • 09-2024 – Introduction to Databases – Fundação Bradesco

Languages

  • Portuguese – Native
  • English – Intermediate

The final result will be 3 course offer messages, one for each channel: email, LinkedIn, and WhatsApp.

Practice: Flow Structure

The image below illustrates the Flow structure adopted for this use case.

The flow starts with the transcription of the course video, handled by a Python script. Next, two Crews — which wait for the transcription to finish — run in parallel. The first Crew focuses on understanding the video and generating a detailed description of it. The second analyzes the Lead’s resume to produce a comprehensive profile. Finally, the Crew that creates the messages for each channel uses both descriptions to craft a highly persuasive offer for the lead.

Practice: Exploring the Code

⚠️ Versions Used:
  • Python 3.11.9
  • crewai 0.121.0

To create the Flow project structure, use the following command:

crewai create flow <flow_name>

The image below shows the structure of the course_offering project, generated by the command above:

  • crews/: contains all the Crews in the Flow. Each Crew is a folder that includes a .py file and a config/ subfolder, where the Agents and Tasks are defined.
  • tools/: contains all custom Tools.
  • main.py: main file for executing the Flow.

As mentioned in the previous section, 3 Crews were created. The first one was course_description, whose goal is to describe the transcribed video. This Crew contains only 1 Agent: the Course Copywriting Specialist. Below is the YAML file with this Agent’s definition.

course_copywriting_specialist:
  role: >
    Course Copywriting Specialist
  goal: >
    Generate persuasive summaries from course transcripts, highlighting benefits,
    content, and target audience to maximize lead conversion.
  backstory: >
    With years of experience in educational marketing and copywriting, you has
    dedicated your career to transforming technical and educational content into clear,
    engaging, and conversion-focused messages. You deeply understands how to highlight
    the value of a course, even from raw transcripts, and knows exactly how to present
    information attractively to spark the interest of potential students and encourage
    immediate action.

Below is the Task definition. The {transcript} placeholder will be replaced with the video transcription provided in main.py.

course_copywriting:
  description: >
    Course transcript: "{transcript}"

    Your goal is to generate a detailed and persuasive summary focused on maximizing
    the chances of selling the course to a lead. The summary must clearly highlight:

    1. Course name or main topic, if available.
    2. Target audience (who the course is for).
    3. What the course teaches (skills, topics, modules, etc.).
    4. Key benefits and differentiators (teaching approach, extras, instructor style, etc.).
    5. Format and accessibility (free or paid, online, self-paced, etc.).
    6. A strong closing paragraph encouraging the reader to start the course.
  expected_output: >
    Use clear, engaging, and professional language, and do not omit any important detail
    mentioned in the transcript. The tone should be informative, engaging, and sales-oriented.

    If possible, organize your response so that each main idea from the transcript corresponds
    to one of the key areas (such as course topic, audience, content, benefits, format, and closing
    message). This ensures clarity and enhances persuasive impact without repeating or forcing
    structure unnaturally.
  agent: course_copywriting_specialist

Below is the Crew definition file (course_description.py), including the created Agent and Task, with the process defined as Sequential. Note that the result of this Crew is saved in the course_description.md file for validation purposes.

from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from dotenv import load_dotenv

load_dotenv()


@CrewBase
class CourseDescription:

    agents_config = "config/agents.yaml"
    tasks_config = "config/tasks.yaml"


    @agent
    def course_copywriting_specialist(self) -> Agent:

        return Agent(
            config=self.agents_config["course_copywriting_specialist"],
        )


    @task
    def course_copywriting(self) -> Task:

        return Task(
            config=self.tasks_config["course_copywriting"],
            output_file="course_description.md"
        )


    @crew
    def crew(self) -> Crew:

        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True
        )

The second Flow created was lead_description. Just like the previous one, it includes only one Agent: the Lead Profile Specialist. Below is the YAML file with this Agent’s definition.

lead_profile_specialist:
  role: >
    Lead Profile Specialist
  goal: >
    Analyze lead resumes and generate clear, humanized summaries that highlight
    the individual's background, skills, projects, learning habits, and career goals.
  backstory: >
    With a background in talent profiling and educational advising, you specialize in
    transforming structured resumes into meaningful, narrative-style profiles. You understand
    that behind every CV there's a person with goals, context, and potential. Your mission is
    to go beyond bullet points—interpreting what each lead has done, what they're aiming for,
    and how they learn—so that organizations can better engage, recommend, or support them.

Below is the YAML file with the Task definition.

lead_course_match_analysis:
  description: >
    Your goal is to generate a clear, natural, and humanized summary of the lead's profile.
    This summary must not copy or list resume items mechanically. Instead, you should interpret
    and rewrite the information as if you were describing the lead to a colleague or a course advisor.


    Your summary must include:
       - The name of the lead.
       - Highlight their educational background, relevant courses or certifications.
       - Mention any personal or professional projects if available.
       - Emphasize their technical skills and learning habits.
       - Reflect on their current career stage and objectives (e.g. first job, career change, skill development).
       - Avoid copying and pasting from the resume. Write as if you're describing the lead to a colleague.
  expected_output: >
    Write in a clear, natural, and professional tone. Do not list resume items mechanically.
    Use full sentences and a friendly, human voice.

    The response will be used to understand the person behind the resume and guide personalized communication
    and recommendations.

    Use a paragraph structure with no section headers. Keep it fluid and focused on providing a full picture
    of the lead based on the CV.
  agent: lead_profile_specialist

Finally, here is the Crew file (lead_description.py). Note that in this process, the FileReadTool is used by the Agent to access the Lead’s resume, which is in Markdown format (Lead_CV.md). Additionally, the result of this Crew is saved in the lead_description.md file.

from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from crewai_tools import FileReadTool
from dotenv import load_dotenv

load_dotenv()


@CrewBase
class LeadDescription:

    agents_config = "config/agents.yaml"
    tasks_config = "config/tasks.yaml"


    @agent
    def lead_profile_specialist(self) -> Agent:

        return Agent(
            config=self.agents_config["lead_profile_specialist"],
            tools=[FileReadTool(file_path="Lead_CV.md")]
        )


    @task
    def lead_course_match_analysis(self) -> Task:

        return Task(
            config=self.tasks_config["lead_course_match_analysis"],
            output_file="lead_description.md"
        )


    @crew
    def crew(self) -> Crew:

        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True
        )

Finally, the third Flow was create_messages.py. This Flow includes 2 Agents. The first aims to find a connection between the course and the Lead, identifying key points to make the offer more persuasive. The second is responsible for creating the messages for the 3 communication channels: email, LinkedIn, and WhatsApp. Below is the YAML file with the definition of these Agents.

lead_course_matching_specialist:
  role: >
    Course Matching Specialist
  goal: >
    Analyze lead profiles and course descriptions to determine how a specific course
    can support the lead's professional or educational growth, identifying alignment,
    opportunities, and value.
  backstory: >
    With experience in educational advising, instructional design, and learner engagement,
    you specialize in connecting the right people to the right learning opportunities.
    You have a keen eye for identifying where a course can fill skill gaps, support
    transitions, or amplify someone's career trajectory. Your role is to interpret both the
    lead's background and the course content, and clearly articulate how they match — always
    with a focus on individual goals, learning styles, and practical outcomes.

course_messaging_specialist:
  role: >
    Course Messaging Specialist
  goal: >
    Create compelling, personalized messages that effectively communicate the value of a
    matched course to the lead, using platform-appropriate language and format to maximize
    interest and increase the likelihood of course enrollment.
  backstory: >
    With a strong background in persuasive communication, copywriting, and audience engagement,
    you specialize in translating course value into tailored messages that resonate with individual
    leads. You understand the nuances of each communication channel — email, WhatsApp, and LinkedIn —
    and how to adapt tone, structure, and content accordingly. You know how to craft messages that
    reflect both the unique attributes of the course and the specific goals, interests, and professional
    context of the lead. Your mission is to spark interest, build trust, and encourage action through
    smart, human-centered messaging.

Below is the YAML file with the Task definitions. Note that in the first Agent’s Task, the course and Lead descriptions ({course_description} and {lead_description}), generated by the previous Flows, are provided. In the second Agent’s Task, the video URL ({course_url}) is sent so it can optionally be included in the message, along with the name of the person sending the messages ({sender_name}).

lead_course_match:
  description: >
    Course description: "{course_description}"

    Lead description: "{lead_description}"


    Your goal is to analyze how the course can contribute to the professional and educational
    development of the lead, based on their background and the course offering.

    Your analysis must include:
    - Consideration of the lead's current career stage (e.g., beginner, transitioning, upskilling).
    - Identification of relevant technical or academic background that connects with the course content.
    - Gaps, needs, or potential opportunities in the lead's profile that the course could help address.
    - Alignment between the course's structure, approach, or style and the lead's learning behavior or goals.
    - Specific course elements that could bring the most value to the lead's professional journey.

    Base your reasoning on the lead's CV and the course description. Be precise and insightful when
    explaining how the course could help.
  expected_output: >
    Write in a clear, professional, and engaging tone. Avoid vague or generic statements.

    Your response must read like a thoughtful analysis that would help a course advisor, sales team,
    or educational consultant understand why this course is a strong (or strategic) fit for the lead.

    Structure your output under the header: "How the Course Can Help".
  agent: lead_course_matching_specialist

lead_course_messaging:
  description: >
    Course URL: "{course_url}"
    Sender Name: "{sender_name}"

    Your goal is to generate persuasive, personalized messages to invite the lead to take thecourse
    described, using the information provided by the Course Matching Specialist. You must create
    distinct messages for three different communication channels: email, WhatsApp, and LinkedIn.

    For each channel:

    - Email: Write a complete and professional message with a subject line. The email should have a
      clear structure, highlight key benefits of the course for the lead, and use a persuasive but
      respectful tone.

    - WhatsApp: Write a short, friendly, and attention-grabbing message. Feel free to use emojis and
      a conversational tone, but keep it aligned with professional communication. Be direct and include
      the course link naturally.

    - LinkedIn: Write a message that strikes a balance between the formality of email and the directness
      of WhatsApp. Use a professional yet approachable tone, and make sure the message sounds like
      something you'd send in a connection request or direct message on LinkedIn. Include the course URL
      smoothly in the flow of the message.

    Important:
    - Do not use placeholders or generic fillers such as [COURSE NAME], [PLATFORM], [Your Name], [Your Position],
    or similar.
    - Only include information that has been explicitly provided. If certain details (like sender name or job title)
    are not available, omit them entirely rather than invent or simulate placeholders.
    - The messages must be tailored using the context from the lead profile and the course match analysis.
    - The course URL must appear naturally in all messages.
    
  expected_output: >
    Write one complete message for each of the three channels: email (with subject), WhatsApp, and LinkedIn.

    Each message must reflect the tone, structure, and intent appropriate to its platform.
    Be persuasive, context-aware, and always include the course URL naturally.

    Do not use bullet points or artificial formatting inside the messages (except for the email structure
    if needed).

    All text must read naturally as a human-written message.
  agent: course_messaging_specialist

Below is the Crew file (create_messages.py). Note that 2 files are saved: lead_course_match.md, used to validate the output of the first Agent, and messages.md, which is the final output of the system.

from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task
from dotenv import load_dotenv

load_dotenv()


@CrewBase
class CreateMessages:

    agents_config = "config/agents.yaml"
    tasks_config = "config/tasks.yaml"


    @agent
    def lead_course_matching_specialist(self) -> Agent:

        return Agent(
            config=self.agents_config["lead_course_matching_specialist"]
        )
    

    @agent
    def course_messaging_specialist(self) -> Agent:

        return Agent(
            config=self.agents_config["course_messaging_specialist"]
        )


    @task
    def lead_course_match(self) -> Task:

        return Task(
            config=self.tasks_config["lead_course_match"],
            output_file="lead_course_match.md"
        )
    

    @task
    def lead_course_messaging(self) -> Task:

        return Task(
            config=self.tasks_config["lead_course_messaging"],
            output_file="messages.md"
        )


    @crew
    def crew(self) -> Crew:

        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True
        )

To wrap up, below is the main.py file.

from pydantic import BaseModel
from crewai.flow import Flow, listen, start, and_
from langchain_community.document_loaders import YoutubeLoader
from crews.course_description.course_description import CourseDescription
from crews.lead_description.lead_description import LeadDescription
from crews.create_messages.create_messages import CreateMessages


class CourseOfferingState(BaseModel):
    
    url: str = ""
    transcript: str = ""
    course_description: str = ""
    lead_description: str = ""


class CourseOffering(Flow[CourseOfferingState]):

    @start()
    def video_transcription(self):

        self.state.url = "https://www.youtube.com/watch?v=QXeEoD0pB3E&list=PLsyeobzWxl7poL9JTVyndKe62ieoN-MZ3&ab_channel=Telusko"
        
        loader = YoutubeLoader.from_youtube_url(
            self.state.url,
            language=["en"]
        )
        docs = loader.load()
        self.state.transcript = docs[0].page_content


    @listen(video_transcription)
    def course_description(self):

        inputs = {
            "transcript": self.state.transcript
        }

        crew = CourseDescription().crew()
        resp = crew.kickoff(inputs=inputs)
        self.state.course_description = resp.raw


    @listen(video_transcription)
    def lead_description(self):

        crew = LeadDescription().crew()
        resp = crew.kickoff()
        self.state.lead_description = resp.raw
    

    @listen(and_(course_description, lead_description))
    def create_messages(self):

        inputs = {
            "course_description": self.state.course_description,
            "lead_description": self.state.lead_description,
            "course_url": self.state.url,
            "sender_name": "Edvaldo Melo"
        }

        crew = CreateMessages().crew()
        crew.kickoff(inputs=inputs)


if __name__ == "__main__":
    flow = CourseOffering()
    flow.kickoff()

Note that 2 classes were created: CourseOfferingState and CourseOffering. The CourseOfferingState class inherits from BaseModel (Pydantic) and is responsible for storing variable states throughout the Flow execution. The CourseOffering class handles the entire Flow execution logic and includes 4 methods:

  • video_transcription: This method uses the @start decorator, which indicates that the Flow begins here. It’s a Python function where the video URL is first stored as a state variable. Then, the video is transcribed using the YoutubeLoader class from Langchain’s Document Loaders module. The transcription is also stored as a state variable.
  • course_description: The @listen(video_transcription) decorator indicates that this method only runs after video_transcription finishes. It calls the Crew responsible for describing the course, and stores the result in self.state.course_description.
  • lead_description: This method works similarly to course_description, calling the Crew that generates the Lead description and storing the result in self.state.lead_description.
  • create_messages: This method waits for both course_description and lead_description to finish. That’s ensured by the use of the and_ function inside the decorator: @listen(and_(course_description, lead_description)). It generates the final output of the Flow — the messages for the 3 communication channels.

Results: Messages Generated for the Course Offer

Before showing the generated messages, here are the intermediate files used to validate each stage of the Flow. Click the arrows below to expand and view the results. 🔽

Coure Description 🔽

Course Title: Learn Python Programming: A Fun and Engaging Journey

Target Audience:
This course is tailored for absolute beginners who are eager to dive into the world of programming. Whether you’re completely new to coding or have limited experience, this series welcomes everyone who is ready to invest their time in learning Python.

What the Course Teaches:
In this comprehensive Python series, you will embark on an exciting learning journey starting from the very fundamentals of the language. Key topics include core programming concepts, essential syntax, and practical applications that prepare you for real-world programming challenges. Each module is designed to build your understanding progressively, ensuring that you not only learn the language but also grasp the underlying concepts that make Python so powerful.

Key Benefits & Differentiators:
What sets this course apart is its engaging teaching approach. The instructor, Ivan Verdi, is committed to making learning both enjoyable and captivating. With the use of animations, interactive content, and a personable teaching style, Ivan aims to hold your attention and make complex concepts easy to understand. Plus, the course includes fun elements to keep boredom at bay, ensuring that your learning experience is as interesting as it is educational.

Format and Accessibility:
This Python programming series is completely free and available online, making it accessible to anyone, anywhere. You can learn at your own pace, allowing you the flexibility to balance your studies with daily life. There’s no catch—just a passion for teaching and a dedication to spreading knowledge.

Closing Message:
Don’t miss this opportunity to start your programming journey in a dynamic and enjoyable way! Join Ivan in this innovative Python series and unlock the skills that will empower you in the tech world. Subscribe and share with your friends so everyone can embark on this exciting adventure together. Get ready to learn Python like never before—your coding journey starts here!

Lead Description 🔽

João Silva is an enthusiastic Computer Science undergraduate from João Pessoa, Brazil, with a strong passion for technology and problem-solving. He has a solid educational foundation that started with a technical diploma in Informatics, where he honed his logical reasoning and mathematical skills, and is currently pursuing a bachelor’s degree at the Federal University of Paraíba. João has taken the initiative to further his knowledge through various online courses, earning certifications in areas such as computer networking, HTML, CSS, and JavaScript, which deepen his technical acumen.

In terms of practical experience, though he is yet to embark on his professional journey, João has proactively developed several personal projects. Notable among these are a personal portfolio website created with HTML, CSS, and JavaScript, and a simple inventory management system demonstrating his understanding of databases and CRUD operations. His involvement in networking projects during his studies showcases his hands-on skills and commitment to learning.

As João seeks his first opportunity in the technology field, he is eager to apply his skills in a collaborative environment where he can contribute actively and grow as a professional. His learning habits depict a motivated individual who values continuous improvement and is excited to engage with the tech community. With a foundation set in web development and databases, João is looking forward to forging a path in an industry he is genuinely passionate about.

Course and Lead Matching 🔽

How the Course Can Help

João Silva, as an enthusiastic Computer Science undergraduate, stands at an exciting intersection of education and potential career advancement. The “Learn Python Programming: A Fun and Engaging Journey” course is particularly well-suited for him, perfectly aligning with his current career stage as a beginner who is eager to learn and grow in the tech industry.

  1. Career Stage Alignment: João is currently seeking his first opportunity in the technology field, which means he is in a transitional phase where foundational skills are crucial. This course is designed specifically for absolute beginners, making it an ideal stepping stone for him as he prepares to enter the workforce. Building a solid understanding of Python programming will be advantageous for upcoming job applications, particularly in roles that require coding skills.

  2. Relevant Technical Background: With solid experience in HTML, CSS, and JavaScript, João has a good grasp of web development principles, which are often complemented by proficiency in back-end programming languages like Python. The course will deepen his understanding of programming concepts and syntax, bridging any gaps between his existing knowledge base and proficiency in Python. This cross-pollination of skills could enhance his projects and make him a more versatile candidate in the tech job market.

  3. Addressing Gaps and Needs: Despite João’s commendable background in web technologies and database management, he might lack experience in general programming concepts and additional language syntax, which can limit his ability to tackle more complex programming challenges. This course explicitly addresses these gaps by covering core programming concepts and practical applications of Python, thereby equipping him with the skills to develop more sophisticated applications and tools in the future.

  4. Learning Style Alignment: João has demonstrated a proactive approach to learning through various online courses and personal projects, indicating that he thrives in engaging and interactive educational environments. The course’s teaching style, featuring animations, interactive content, and a personable instructor, resonates with his appetite for enjoyable learning experiences. This engaging format is likely to cater to his learning habits and will ensure he remains motivated and focused throughout his Python programming journey.

  5. Specific Course Elements to Enhance Value: The course’s emphasis on real-world programming challenges and practical applications will allow João to immediately apply what he learns. Particularly, the interactive elements and engaging delivery will help him solidify his understanding of programming logic while keeping learning fun. As João looks to expand his portfolio, the skills acquired through this course can directly enhance the functionality of his existing projects, such as adding Python-driven features to his web applications or developing independent software solutions.

In summary, the “Learn Python Programming: A Fun and Engaging Journey” course is an excellent match for João Silva’s professional growth. It provides him with the opportunity to build foundational programming skills in a fun and approachable format, enhancing his profile while aligning with his career aspirations in technology. By participating in this course, João will not only fill in the gaps in his knowledge but also position himself effectively as he enters the competitive job market in tech.

Finally, here are the 3 messages generated in Markdown format — one for each channel: email, LinkedIn, and WhatsApp:

Email:
Subject: Propel Your Career Forward with Python Programming

Dear João,

I hope this message finds you well. As an enthusiastic Computer Science undergraduate, you’re in a prime position to leverage foundational skills that can make a significant difference in your career path. That’s why I’m excited to share with you the “Learn Python Programming: A Fun and Engaging Journey” course.

This course is specially tailored for beginners like you who are eager to step into the technology field. As you seek your first opportunity, mastering Python will not only boost your programming skills but also enhance your job applications, particularly for roles that require coding expertise.

Given your solid background in HTML, CSS, and JavaScript, this course will bridge any gaps in your programming knowledge and give you a deeper understanding of important concepts. It’s designed to be engaging and interactive, incorporating animations and challenges, ensuring that you enjoy the learning experience while staying focused.

Additionally, as you work on your personal projects, the skills you acquire will enable you to develop more sophisticated applications—increasing your versatility as a candidate. The practical, real-world programming challenges will allow you to immediately apply what you learn, perfect for enhancing the functionality of your existing projects.

I strongly encourage you to take a moment to explore the course here: https://www.youtube.com/watch?v=QXeEoD0pB3E&list=PLsyeobzWxl7poL9JTVyndKe62ieoN-MZ3&ab_channel=Telusko. I genuinely believe this journey will be an engaging stepping stone towards the fulfilling tech career you are aiming for.

Best regards,
Edvaldo Melo


WhatsApp:
Hey João! 🌟 I hope you’re doing great! I just came across this awesome course called “Learn Python Programming: A Fun and Engaging Journey.” It’s perfect for beginners like you, and will help you level up your coding skills to land that first job in tech! Take a look here: https://www.youtube.com/watch?v=QXeEoD0pB3E&list=PLsyeobzWxl7poL9JTVyndKe62ieoN-MZ3&ab_channel=Telusko. Happy learning! 🚀


LinkedIn:
Hi João,

I hope you’re enjoying your Computer Science studies! As you’re on the lookout for your first opportunity in tech, I thought you’d find the “Learn Python Programming: A Fun and Engaging Journey” course particularly beneficial. It’s designed for beginners and covers essential programming concepts that will bridge any gaps in your knowledge.

With your solid foundation in web development, enhancing your Python skills will undoubtedly make you a more versatile candidate as you prepare to enter the job market. The interactive format will keep you engaged, making your learning experience enjoyable.

If you’re interested, you can find the course here: https://www.youtube.com/watch?v=QXeEoD0pB3E&list=PLsyeobzWxl7poL9JTVyndKe62ieoN-MZ3&ab_channel=Telusko. I believe it will greatly contribute to your professional growth!

Looking forward to your thoughts!
Best,
Edvaldo Melo

Posted in

Leave a comment