惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园_首页
S
SegmentFault 最新的问题
罗磊的独立博客
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
D
Docker
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
V
V2EX
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
腾讯CDC
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
Vercel News
Vercel News
H
Help Net Security
博客园 - Franky
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
用GPT4制作Sora落地页 - 少数派
2024-03-24 · via 少数派

起因

2024年2月15日,OpenAI发布了Sora,AI圈又沸腾了,大家都惊艳于Sora的效果。Sora的热度一度超过了GPT,有流量的地方就有机会,比如对于独立开发者来说最好的方式就是制作网站来承载这泼天的财富

虽然之前没有做过落地页,但没关系我有GPT4,所以这次打算通过GPT4来制作个Sora落地页。先展示下最后的成品先:Sora Application

什么是落地页?

可能有人会问什么是落地页呢?下面是GPT4的回答,简单来说就是:将你想提供的产品或服务通过静态网页展示给用户,吸引潜在的客户,这也是快速验证自己产品想法的方式,避免你开发完产品发现别人并不感兴趣的尴尬情况

有人说2023年是waitlist元年,因为很多AI项目在真正亮相的时候都会要求用户加入等待名单(join the waitlist)。所以今天也要来手把手教大家做一个Sora waitlist

第零步:搜索现成项目🔍

对于程序员来说,要避免重复造轮子,能借鉴的就不会自己写,所以第一步就是在github上搜索有没有现成可以直接拿过来用的。最后找到的是这个:nextjs-waitlist-page,很符合我的预期的样子。画面简洁清晰,并可以让目标用户可以留下联系方式,方便后续宣传推广

接下来就是此页面的基础上进行修改调整即可

给GPT4指定角色,让其吐出的答案更专业,用到的提示词如下:

你现在是一名专业的前端工程师,你对HTML、CSS、JavaScript等前端技术有深入的了解,同时熟悉vue, React,next.js,能够制作和优化用户界面。你能够解决浏览器兼容性问题,提升网页性能,并实现优秀的用户体验。请在这个角色下为我解答以下问题。

第二步:调整下文字

从github扒拉下代码后,直接`pnpm install`安装相应的包之后即可启动 `npm run dev`

首先我们调整下右侧的文字信息,通过搜索框找到对应的位置🔍,换上我们想要展示的信息即可

调整好文字内容后的效果如下:

第三步:添加视频播放列表

接着我们来调整下页面的左,先将图片换成Sora的演示视频,吸引用户的注意力。页面左侧的代码如下:

<div className="md:h-full h-80 bg-[#C9F9D1] relative overflow-hidden">
	<Image
		src="/mobile-app.png"
		alt="Mobile App Screenshots"
		fill
		className="object-contain mt-8 md:mt-24 px-14 object-bottom"
	/>
</div>

我们先将图片替换成视频,询问GPT4如何替换成这个视频:https://cdn.openai.com/sora/videos/big-sur.mp4

我只轻描淡写地给了个指示,它不光写了,还解释了。它真的,我哭死。😭😭😭

停止感动。立马复制过来!效果还行:

不过我还想增加多一些视频,同时视频会自动来回进行播放,首先询问下GPT4是否有类似的组件可以进行支持

好好好,它给我提示可以通过 Swiper 框架来实现,Google搜索了下🔍,确实可以用得上,它里面有很多丰富现成组件可以参考借鉴

GPT4提供的代码如下:


import React from 'react';
import { Swiper, SwiperSlide } from 'swiper/react';
import 'swiper/css'; // 导入swiper的CSS
import 'swiper/css/navigation';
import 'swiper/css/pagination';
import SwiperCore, { Autoplay, Pagination, Navigation } from 'swiper';

// 需要使用的Swiper模块
SwiperCore.use([Autoplay, Pagination, Navigation]);

const VideoSwiper = () => {
  return (
    <Swiper
      spaceBetween={30} // 每个视频之间的间隔
      centeredSlides={true} // 激活的幻灯片会居中
      autoplay={{ // 自动播放配置
        delay: 2500, // 延迟时间
        disableOnInteraction: false, // 用户操作后是否停止自动播放
      }}
      pagination={{ // 分页器配置
        clickable: true,
      }}
      navigation={true} // 前进后退按钮
      className="mySwiper"
    >
      <SwiperSlide>
        <video controls style={{width: '100%'}}>
          <source src="https://cdn.openai.com/sora/videos/big-sur.mp4" type="video/mp4" />
        </video>
      </SwiperSlide>
      {/* 可以添加更多的SwiperSlide来包含不同的视频 */}
    </Swiper>
  );
};

export default VideoSwiper;

将此代码封装为`VideoSwiper`函数,并修改page.tsx代码引入次函数即可,page.tsx代码如下:

import EmailForm from "@/components/EmailFom";
import Image from "next/image";
import { Toaster } from "react-hot-toast";
import VideoSwiper from "@/components/VideoPlayer"; // 确保路径正确,根据实际情况调整

export default function Home() {

return (
	<>
	<Toaster />
	<section className="w-screen h-dvh grid grid-cols-1 md:grid-cols-2 gap-6">
	
		<div className="md:h-full h-80 bg-[#C9F9D1] relative overflow-hidden flex justify-center items-center">
		{/* 使用VideoSwiper组件 */}
			<VideoSwiper />
		</div>
		
		<main className="flex flex-col gap-8 mt-8 justify-center px-6 pb-10">
		<h1 className="font-semibold tracking-tight text-zinc-900 text-3xl leading-tight md:text-4xl max-w-lg">
		Creating video from text/image, generating loop video, extending video forward and backward
		</h1>
		<p className="text-gray-500">
			Join the waitlist to be notified when Sora is available!
		</p>
		<EmailForm />
		</main>
	</section>
	</>
);
}

效果如下:

第四步:闪动的字体光标

接下来,我还想要在末尾加一个一直闪动的打字光标。这种小任务,我选择直接让 GPT4 帮我写,
提示词如下:

接着我想在page.tsx中添加个标题,实现一直闪动的打字光标效果: 
1. 前面的"Try Sora"是一直固定的,后面的短语模拟打字的效果,依次进行呈现,打完一个短语就切换到另一个短语 
2. 可选的短语有['the best text-to-video tool', 'the world simulator', 'Unleash Your Imagination']

GPT4返回的答案

GPT4提供的具体代码如下:

import React, { useState, useEffect } from 'react';
// 其他导入保持不变

const phrases = ['the best text-to-video tool', 'the world simulator', 'Unleash Your Imagination'];

const TypingEffect = () => {
  const [phraseIndex, setPhraseIndex] = useState(0);
  const [displayedText, setDisplayedText] = useState('');
  const [isDeleting, setIsDeleting] = useState(false);

  useEffect(() => {
    let timeoutId;

    if (isDeleting) {
      timeoutId = setTimeout(() => {
        setDisplayedText(current => current.slice(0, -1));
        if (displayedText.length === 0) {
          setIsDeleting(false);
          setPhraseIndex((current) => (current + 1) % phrases.length);
        }
      }, 50);
    } else {
      timeoutId = setTimeout(() => {
        setDisplayedText(phrases[phraseIndex].slice(0, displayedText.length + 1));
        if (displayedText.length === phrases[phraseIndex].length - 1) {
          setIsDeleting(true);
        }
      }, 150);
    }

    return () => clearTimeout(timeoutId);
  }, [displayedText, isDeleting, phraseIndex]);

  return (
    <h1 className="typing-cursor">
      Try Sora {displayedText}
    </h1>
  );
};

export default function Home() {
  return (
    <>
      <Toaster />
      {/* 页面布局保持不变 */}
      <section className="w-screen h-dvh grid grid-cols-1 md:grid-cols-2 gap-6">
        <div className="md:h-full h-80 bg-[#C9F9D1] relative overflow-hidden flex justify-center items-center">
          <VideoSwiper />
        </div>
        <main className="flex flex-col gap-8 mt-8 justify-center px-6 pb-10">
          <TypingEffect /> {/* 使用TypingEffect组件替代原有的<h1>标签 */}
          {/* 其他内容保持不变 */}
        </main>
      </section>
    </>
  );
}

效果如下:

虽然是实现了打字效果,但就是太丑了,不够炫酷,而且字体不够醒目,于是让它继续帮我优化下CSS

这下终于满意,效果还不错:

第五步:添加FAQ

最后再给页面添加个FAQ,即用户常见的问题,这里也是直接在github进行搜索,至于为什么不用GPT4来帮忙写是因为我知道它生成的虽然能用,但需要不断进行调整优化样式,不如直接用现成的,遇到有问题的地方再来问GPT4更快,这里参考的是这个:nextjs-faq-page,样式也深得我心

第六步:部署上线

最后将代码提交到 `Github` ,并借助`vercel`的自动部署服务就可以将页面进行部署了,来看看成品吧,Sora Application

收尾工作

恭喜你看到这里,貌似你会发现我的工作就是提出想法💡,写Prompt给GPT4,然后再ctrl+c,ctrl+v。其实不然,GPT4不是每次都准确地返回准确的回答,有时候也会报错,你需要不断进行询问调试才能最终获得你想要的结果,当然也有可能是我的Prompt写得还不够具体准确。但不管怎样,瑕不掩瑜,相比于以前只能通过搜索引擎或者寻找其他大佬寻找解决方法,GPT4的出现极大地提升工作效率,只需要几个小时即可以快速开发完一个网站。相信不久的将来它将完全的取代我🐶