I'm
I have solid knowledge in all phases of development and production, specialized in Angular as a web developer and android as a mobile developer.
Passionate about the future and technology, with all the revolution that AI and blockchain can bring us.
.. And this is my Workspace
My Projects
Radios de España
Radio app with great features such as alarm system, fully responsive, mvvm, new implementation of Media3, material design philosophy, use of Kotlin scopes for faster interaction, integration with Firebase, Google Analytics, AdMob, and much more.
I carry out the idea, design, development, testing, implementation and marketing campaigns on my own, it provide me a lot of knowledge and experience.
Main technologies used
Radio Manager
A CMS developed in Angular to take advantage of the strength and dynamism of the framework and in charge of managing all aspects of radio apps deployed.
Using real-time connection with the database, externals REST-API's to content management and libraries that generate speed in handling. All this being fully responsive, dynamic, intuitive, scalable and with clean code philosophy.
In the video you can see a code snippet, for security it has not been published on any platform
Main technologies used
Montana World
A trekking e-commerce that takes advantage of the drop-shipping model and all the advantage provided by shopify. The web and the branding are designed and built by me, as well as the marketing campaigns.
Thanks to this project I was able to see beyond the development phase and learn SEM, SEO, market segmentation and marketing strategies, as well as everything related to the creation, start-up and growth of an e-commerce.
The website is currently offline.
Main technologies used
My Skills
Android Developer
0%
Kotlin
:doodle {
@grid: 1x6
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Java
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
SDK
:doodle {
@grid: 1x6
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Firebase
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
MySQL
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Flutter
:doodle {
@grid: 1x3
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Deploy
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Mockito
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);
--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Web Developer
0%
Javascript
:doodle {
@grid: 1x6
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
HTML5
:doodle {
@grid: 1x6
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
WordPress
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
PHP
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
.NET
:doodle {
@grid: 1x3
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
CSS3
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Angular
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Shopify
:doodle {
@grid: 1x6
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Additional skills
0%
Git
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Photoshop
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Docker
:doodle {
@grid: 1x3
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Python
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
GitHub
:doodle {
@grid: 1x4
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
SEO
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
Illustrator
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));
animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}
SEM
:doodle {
@grid: 1x5
/ 100%;
}@place-cell: center;
@size: calc(@calc(11-@index()) * 10%);border-radius: 50%;
border-style: dashed;
border-width: calc(@calc(11-@index()) * 4px);
border-color: hsla(
calc(400 * @index()), 80%, 65%,
calc(3 / @index() * .7)
);--d: @rand(10s, 50s);
--rf: @rand(360deg);
--rt: calc(var(--rf) + @pick(1turn, -1turn));animation: spin var(--d) ease infinite;
@keyframes spin {
from { transform: rotate(var(--rf)) }
to { transform: rotate(var(--rt)) }
}