Skip to content

Commit

Permalink
Added homepage SEO copy (#977)
Browse files Browse the repository at this point in the history
  • Loading branch information
norberttech authored Feb 9, 2024
1 parent 7a6a5e3 commit eb5ec4c
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 36 deletions.
4 changes: 4 additions & 0 deletions web/landing/assets/images/icons/api.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions web/landing/assets/images/icons/chart-bar.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions web/landing/assets/images/icons/data-flow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions web/landing/assets/images/icons/date.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions web/landing/assets/images/icons/users-group.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 2 additions & 18 deletions web/landing/src/Flow/Website/Controller/DefaultController.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,25 +38,9 @@ public function example(string $topic, string $example) : Response
#[Route('/', name: 'main')]
public function main() : Response
{
// TODO: uncomment and remove below code when frontpage features will be available
// return $this->render('main/index.html.twig', [
// 'contributors' => $this->github->contributors(),
// 'topics' => $this->examples->topics(),
// ]);

$topics = $this->examples->topics();
$currentTopic = \current($topics);

$examples = $this->examples->examples($currentTopic);
$currentExample = \current($examples);

return $this->render('example/index.html.twig', [
return $this->render('main/index.html.twig', [
'contributors' => $this->github->contributors(),
'topics' => $topics,
'examples' => $examples,
'currentTopic' => $currentTopic,
'currentExample' => $currentExample,
'code' => $this->examples->code($currentTopic, $currentExample),
'topics' => $this->examples->topics(),
]);
}

Expand Down
6 changes: 3 additions & 3 deletions web/landing/templates/base.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@
<li>
<a class="p-3 flex items-center" href="https://github.com/orgs/flow-php/projects/1" target="_blank">
Roadmap
<img src="{{ asset('images/icons/external.svg') }}" alt="external resource" width="16" height="16" class="ml-1">
<img src="{{ asset('images/icons/date.svg') }}" alt="external resource" width="16" height="16" class="ml-1">
</a>
</li>
<li>
<a class="p-3 flex items-center" href="https://github.com/orgs/flow-php/discussions" target="_blank">
Discussion
<img src="{{ asset('images/icons/external.svg') }}" alt="external resource" width="16" height="16" class="ml-1">
<img src="{{ asset('images/icons/users-group.svg') }}" alt="external resource" width="16" height="16" class="ml-1">
</a>
</li>
</ul>
Expand Down Expand Up @@ -101,7 +101,7 @@
<div class="basis-2/5 sm:basis-1/3">
<img src="{{ asset('images/icons/transform.svg') }}" alt="transform" width="64" height="64" class="inline">
<h2 class="my-2 text-2xl font-semibold tracking-wide">Transforms</h2>
<p>Shape and optimize for your needs</p>
<p>Shape and optimize for your needs.</p>
</div>

<span class="basis-2/5 self-center ml-auto mt-6 sm:flex-none sm:my-0 sm:mx-2">
Expand Down
111 changes: 96 additions & 15 deletions web/landing/templates/main/index.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,101 @@
</nav>
</div>

<div class="mx-auto max-w-screen-xl mb-10 px-4 grid gap-4 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3">
{% for i in 1..6 %}
<section class="shadow-2xl shadow-gray rounded border-gray border-2 p-4 rounded">
<img src="{{ asset('images/icons/tools.svg') }}" width="32" height="32" alt="feature" class="inline mr-4 bg-blue-100 p-1 rounded">
<h2 class="inline">Flow PHP Feature #{{ i }}</h2>
<hr class="text-blue-100 my-4 border-t-2 rounded">
{% if i is odd %} {# TODO: if key feature subtitle is optional #}
<h3 class="mb-4">This feature is awesome</h3>
{% endif %}
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</p>
</section>
{% endfor %}
<div class="max-w-screen-xl mx-auto mt-5">
<div class="flex flex-wrap -mx-2 mb-20 px-4 items-center">
<div class="w-full lg:w-2/3 px-2">
<section class="shadow-2xl shadow-gray rounded border-gray border-2 p-4 rounded">
<img src="{{ asset('images/icons/tools.svg') }}" width="32" height="32" alt="feature" class="inline mr-2 bg-blue-100 p-1 -mt-4 rounded">
<h2 class="inline text-4xl">Data Processing Made Easy</h2>
<hr class="text-blue-100 my-4 border-t-2 rounded">
<p class="mb-2">
One of the most significant challenges in data processing lies in maintaining consistency, particularly in languages as flexible as PHP.
Instead of creating custom code for each dataset or integration, Flow PHP offers a uniform API for all data sources.
</p>
<p class="mb-2">
Whether you’re dealing with a CSV file or consuming data from a REST API, Flow ensures consistency by offering a uniform API for all data sources.
</p>
<p class="mb-2">
It will not only make your codebase more consistent but also ensure that your system processes data in a memory-efficient way out of the box.
</p>
</section>
</div>
<div class="w-full lg:w-1/3 px-2 hidden lg:block">
<div class="text-center">
<img src="{{ asset('images/icons/data-flow.svg') }}" alt="extract" width="128" height="128" class="inline mb-4">
<h2 class="mt-5 text-4xl">Framework</h2>
</div>
</div>
</div>

<div class="flex flex-wrap -mx-2 mb-20 px-4 items-center">
<div class="w-full lg:w-1/3 px-2 text-center hidden lg:block">
<div class="p-4 bg-gray-300">
<img src="{{ asset('images/icons/api.svg') }}" alt="extract" width="128" height="128" class="inline mb-4">
<h2 class="mt-5 text-4xl">API</h2>
</div>
</div>
<div class="w-full lg:w-2/3 px-2">
<section class="shadow-2xl shadow-gray rounded border-gray border-2 p-4 rounded">
<img src="{{ asset('images/icons/tools.svg') }}" width="32" height="32" alt="feature" class="inline mr-2 bg-blue-100 p-1 -mt-4 rounded">
<h2 class="inline text-4xl">Unified, Strongly Typed API</h2>
<hr class="text-blue-100 my-4 border-t-2 rounded">
<p class="mb-2">
Flow PHP offers a unified, strongly typed API for all data sources, including:
</p>
<ul class="flex flex-wrap items-center mb-2">
<li class="mr-2">CSV,</li>
<li class="mr-2">Json,</li>
<li class="mr-2">XML,</li>
<li class="mr-2">Text,</li>
<li class="mr-2">Parquet,</li>
<li class="mr-2">Avro,</li>
<li class="mr-2">Rest API,</li>
<li class="mr-2">RDBMS,</li>
<li class="mr-2">Elasticsearch / Meilisearch</li>
</ul>
<p class="mb-2">
Flow not only enables you to process various data sources consistently, but also strives to accurately
detect data types and cast them to the appropriate PHP types.
</p>
<p>
Even when reading schemaless formats like CSV, Flow allows you to either predefine the schema
according to which it will cast the data, or it will attempt to infer the schema from the data itself.
</p>
</section>
</div>
</div>

<div class="flex flex-wrap -mx-2 mb-20 px-4 items-center">
<div class="w-full lg:w-2/3 px-2">
<section class="shadow-2xl shadow-gray rounded border-gray border-2 p-4 rounded">
<img src="{{ asset('images/icons/tools.svg') }}" width="32" height="32" alt="feature" class="inline mr-2 bg-blue-100 p-1 -mt-4 rounded">
<h2 class="inline text-4xl">Consistent Memory Consumption</h2>
<hr class="text-blue-100 my-4 border-t-2 rounded">
<p class="mb-2">
Processing large datasets is no easy task, especially without dedicated tools.
The most common solution is to read datasets in chunks and process them one by one.
</p>
<p class="mb-2">
But unfortunatelly it sounds easier than it is. The most common problem is lack of unified
API for all data sources and memory management. Flow PHP solves this problem for you.
</p>
<p class="mb-2">
But unfortunately, it sounds easier than it actually is. The most common problem lies in the lack of a unified API for all data sources and proper memory management.
Flow PHP addresses this issue for you.
</p>
<p class="mb-2">
All of this is possible thanks to the Flow PHP architecture based on generators and iterators.
This approach enables you to process large datasets even on small machines.
</p>
</section>
</div>
<div class="w-full lg:w-1/3 px-2 hidden lg:block">
<div class="text-center">
<img src="{{ asset('images/icons/chart-bar.svg') }}" alt="extract" width="128" height="128" class="inline mb-4">
<h2 class="mt-5 text-4xl">Memory Management</h2>
</div>
</div>
</div>
</div>
{% endblock %}

0 comments on commit eb5ec4c

Please sign in to comment.